<?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>167806</bug_id>
          
          <creation_ts>2017-02-03 12:08:13 -0800</creation_ts>
          <short_desc>JSDOMConvert is too big. Split it up!</short_desc>
          <delta_ts>2017-02-07 10:56:54 -0800</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>ap</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1273004</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-03 12:08:13 -0800</bug_when>
    <thetext>JSDOMConvert is too big. Split it up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273019</commentid>
    <comment_count>1</comment_count>
      <attachid>300558</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-03 12:28:17 -0800</bug_when>
    <thetext>Created attachment 300558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273042</commentid>
    <comment_count>2</comment_count>
      <attachid>300558</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2017-02-03 13:53:38 -0800</bug_when>
    <thetext>Comment on attachment 300558
Patch

&gt; +        Split JSDOMConvert up roughly by IDL type. Some are grouped for connivence, e.g. all the

convenience

rs=me once it applies cleanly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273119</commentid>
    <comment_count>3</comment_count>
      <attachid>300583</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-03 17:34:32 -0800</bug_when>
    <thetext>Created attachment 300583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273126</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-03 17:44:03 -0800</bug_when>
    <thetext>The patch was created using webkit-patch post, with no conflicts in the local tree and svn up to date. I think it&apos;s probably a bug in either svn-create-patch or svn-apply :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273439</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-02-05 17:25:33 -0800</bug_when>
    <thetext>Sam, could you please file a bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273695</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-06 13:26:34 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Sam, could you please file a bug?

https://bugs.webkit.org/show_bug.cgi?id=167903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273696</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-06 13:27:02 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Sam, could you please file a bug?

Any ideas about what I can do to make it work in the mean time. It&apos;s a big enough change I don&apos;t want to land without some testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273757</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-02-06 16:06:47 -0800</bug_when>
    <thetext>Hmm, maybe try rolling tools directory back a couple weeks? This has to be a recent regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1274062</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-02-07 10:56:54 -0800</bug_when>
    <thetext>Committed r211821: &lt;http://trac.webkit.org/changeset/211821&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300558</attachid>
            <date>2017-02-03 12:28:17 -0800</date>
            <delta_ts>2017-02-03 17:34:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167806-20170203122601.patch</filename>
            <type>text/plain</type>
            <size>3704197</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTY0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE3LTAyLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSlNET01Db252ZXJ0IGlzIHRvbyBiaWcu
IFNwbGl0IGl0IHVwIQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3ODA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXQgSlNET01Db252ZXJ0IHVwIHJvdWdobHkgYnkgSURMIHR5cGUuIFNvbWUgYXJl
IGdyb3VwZWQgZm9yIGNvbm5pdmVuY2UsIGUuZy4gYWxsIHRoZQorICAgICAgICBzdHJpbmcgdHlw
ZXMgYXJlIHRvZ2V0aGVyLCBhbGwgdGhlIG51bWVyaWMgdHlwZXMgYXJlIHRvZ2V0aGVyLiBBbHNv
IG1vdmVkIGhlbHBlcnMgZnJvbSAKKyAgICAgICAgSlNET01CaW5kaW5nIHRvIHRoZWlyIHJlc3Bl
Y3RpdmUgSlNET01Db252ZXJ0Rm9vIGhlYWRlci4gRm9yIG5vdywgSlNET01Db252ZXJ0LmggYXMg
YW4KKyAgICAgICAgdW1icmVsbGEgb2YgYWxsIHRoZSBzdWIgaGVhZGVycywgYnV0IGl0IHdpbGwg
YmUgcmVtb3ZlZCwgYW5kIHRoZSBjb2RlIGdlbmVyYXRvciB0YXVnaHQKKyAgICAgICAgdG8gaW5j
bHVkZSB0aGUgcmlnaHQgaGVhZGVyIGluIGEgc3Vic2VxdWVudCBwYXRjaC4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuaDoKKyAgICAgICAgUmVtb3ZlIHRvSlMgdGhhdCB0YWtlcyBhIHN0ZDo6b3B0aW9u
YWw8SURCS2V5UGF0aD4sIGl0IHdhcyB1bnVzZWQsIGFuZCB1cGRhdGUgZGF0ZSBjb2RlCisgICAg
ICAgIHRvIG9ubHkgY2FsbCB2YWx1ZVRvRGF0ZSBvbmNlLCBhbmQgcGFzcyB0aGluZ3MgYnkgcmVm
ZXJlbmNlLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgTW92ZSBtb3N0IG9mIHRo
ZSBjb252ZXJzaW9uIGhlbHBlcnMgaW50byB0aGVpciByZXNwZWN0aXZlIEpTRE9NQ29udmVydEZv
byBoZWFkZXIuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoKKyAgICAg
ICAgTGVhdmUgZm9yIG5vdywganVzdCBoYXMgaW5jbHVkZXMgb2YgYWxsIHRoZSBicm9rZW4gb3V0
IGhlYWRlcnMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRBbnkuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0QmFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRCb29sZWFuLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dEJ1ZmZlclNvdXJjZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRDYWxsYmFj
a3MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnREaWN0aW9uYXJ5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dEVudW1lcmF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlz
dGVuZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW5kZXhlZERCLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEludGVyZmFjZS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRKU09OLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydE51bGwuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbGFibGUuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisg
ICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRPYmplY3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVj
b3JkLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnRVbmlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRWYXJpYWRp
Yy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQu
aC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaDogQ29waWVkIGZyb20gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrKToKKyAgICAgICAgQWRkIGluY2x1ZGUgb2YgSlNET01Db252ZXJ0VmFyaWFkaWMu
aCByYXRoZXIgdGhhbiBKU0RPTUNvbnZlcnQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Ny
eXB0b0N1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25E
YXRhLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHA6Cisg
ICAgICAgICogYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBbnkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9TZXJpYWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbToKKyAgICAgICAgQWRkIGlu
Y2x1ZGVzIGZvciBzcGVjaWZpYyBKU0RPTUNvbnZlcnQgaGVhZGVyIG5vdyB0aGF0IGhlbHBlcnMg
aGF2ZSAKKyAgICAgICAgYmVlbiBtb3ZlZCB0aGVpciBmcm9tIEpTRE9NQmluZGluZy5oCisKIDIw
MTctMDItMDMgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TW9kZXJuIE1lZGlhIENvbnRyb2xzXSBTa2lwIGJhY2sgYnV0dG9uIGlzIHZpc2libGUgd2l0aCBh
IGxpdmUgYnJvYWRjYXN0IHZpZGVvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjExNjQyKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEwODUsNiArMTA4NSw5IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9q
cy9KU0NTU1J1bGVDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3Rv
bS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCisg
ICAgYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnROdW1iZXJzLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3Mu
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5jcHAKICAgICBiaW5kaW5ncy9qcy9K
U0ZvbnRGYWNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRm9udEZhY2VTZXRDdXN0b20u
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMTE2NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw4ICsyODQsOCBA
QAogCQkwN0I3MTE2RjFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QjcxMTZDMUQ4
OTlFNjMwMDlGMEZGQiAvKiBDYXB0dXJlRGV2aWNlTWFuYWdlci5oICovOyB9OwogCQkwN0MwNDZD
MzFFNDI1MDhCMDA3MjAxRTcgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0I4NzU3MUU0MERDRkQw
MDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovOyB9OwogCQkwN0MwNDZD
NDFFNDI1MDhCMDA3MjAxRTcgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc1ODFFNDBEQ0ZEMDA3
MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMDdDMDQ2QzcxRTQyNTE1NTAwNzIwMUU3IC8q
IEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1Db2NvYS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0MwNDZDNTFFNDI1MTJGMDA3MjAxRTcgLyog
QXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbUNvY29hLmNwcCAqLzsgfTsKLQkJMDdDMDQ2Qzgx
RTQyNTE1NTAwNzIwMUU3IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1Db2NvYS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDMDQ2QzYxRTQy
NTEyRjAwNzIwMUU3IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1Db2NvYS5oICovOyB9
OworCQkwN0MwNDZDNzFFNDI1MTU1MDA3MjAxRTcgLyogKG51bGwpIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyB9OworCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogKG51
bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyB9OwogCQkwN0MwNDZDQjFF
NDI2NDEzMDA3MjAxRTcgLyogQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NTYxRTQwRENFNTAwNzFDMEVD
IC8qIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0MxQzBFMjFCRkI2MDAxMDBCRDIyNTYgLyogTWVkaWFU
cmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwN0MxQzBFMDFCRkI2MDAxMDBCRDIyNTYgLyogTWVkaWFUcmFja1N1
cHBvcnRlZENvbnN0cmFpbnRzLmggKi87IH07CiAJCTA3QzFDMEU1MUJGQjYwRUQwMEJEMjI1NiAv
KiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QzFDMEU0MUJGQjYwRUQwMEJEMjI1
NiAvKiBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjgyNyw2ICsyODI3LDMz
IEBACiAJCTdBRjlCMjBFMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEExOENG
QjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAgKi87IH07CiAJCTdBRjlCMjBGMThD
RkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZU
VFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJN0JFNzQyNzM4MUZBOTA2RkJCNEYwRjJDIC8qIEpTU1ZH
R3JhcGhpY3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZGODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQu
aCAqLzsgfTsKKwkJN0MwNEZFNTYxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEFueS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNDQx
RTQzQjUxMTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEFueS5oICovOyB9OworCQk3QzA0RkU1NzFF
NDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFM0IxRTQyRDUwMDAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydEJhc2UuaCAqLzsgfTsKKwkJN0MwNEZFNTgxRTQzRDUyQTAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydEJvb2xlYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMDRGRTQ1MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCb29sZWFu
LmggKi87IH07CisJCTdDMDRGRTU5MUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCdWZm
ZXJTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDRGRTQzMUU0MkY3NjgwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaCAq
LzsgfTsKKwkJN0MwNEZFNUExRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydENhbGxiYWNr
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZF
NEUxRTQzQzE1MjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydENhbGxiYWNrcy5oICovOyB9OworCQk3
QzA0RkU1QjFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0MTFFNDJGNEEyMDA3
RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5jcHAgKi87IH07CisJCTdDMDRGRTVDMUU0M0Q1MkEw
MDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnREYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0MDFFNDJGNDFBMDA3RkNCMjQgLyogSlNET01Db252
ZXJ0RGF0ZS5oICovOyB9OworCQk3QzA0RkU1RDFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252
ZXJ0RGljdGlvbmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MwNEZFNDYxRTQzQjUxMTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERpY3Rpb25hcnku
aCAqLzsgfTsKKwkJN0MwNEZFNUUxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEVudW1l
cmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzA0RkU0NzFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCAqLzsg
fTsKKwkJN0MwNEZFNUYxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEV2ZW50TGlzdGVu
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRG
RTRGMUU0M0MyNTAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRFdmVudExpc3RlbmVyLmggKi87IH07
CisJCTdDMDRGRTYwMUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJbmRleGVkREIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTU1MUU0
M0MzNjQwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJbmRleGVkREIuaCAqLzsgfTsKKwkJN0MwNEZF
NjExRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEludGVyZmFjZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNDIxRTQyRjYzQzAwN0ZD
QjI0IC8qIEpTRE9NQ29udmVydEludGVyZmFjZS5oICovOyB9OworCQk3QzA0RkU2MjFFNDNENTJB
MDA3RkNCMjQgLyogSlNET01Db252ZXJ0SlNPTi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNTAxRTQzQzI1MDAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydEpTT04uaCAqLzsgfTsKKwkJN0MwNEZFNjMxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydE51bGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDRGRTQ4MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdWxsLmggKi87IH07CisJ
CTdDMDRGRTY0MUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdWxsYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNDkxRTQzQjUx
MTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51bGxhYmxlLmggKi87IH07CisJCTdDMDRGRTY1MUU0
M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdW1iZXJzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTNFMUU0MkYyMUYwMDdGQ0IyNCAv
KiBKU0RPTUNvbnZlcnROdW1iZXJzLmNwcCAqLzsgfTsKKwkJN0MwNEZFNjYxRTQzRDUyQjAwN0ZD
QjI0IC8qIEpTRE9NQ29udmVydE51bWJlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTNDMUU0MkQ1MDAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZl
cnROdW1iZXJzLmggKi87IH07CisJCTdDMDRGRTY3MUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNv
bnZlcnRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDMDRGRTRBMUU0M0I1MTIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRPYmplY3QuaCAqLzsg
fTsKKwkJN0MwNEZFNjgxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFJlY29yZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNEMxRTQz
QjdDMzAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFJlY29yZC5oICovOyB9OworCQk3QzA0RkU2OTFF
NDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U2VxdWVuY2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0QjFFNDNCNTEyMDA3RkNCMjQg
LyogSlNET01Db252ZXJ0U2VxdWVuY2VzLmggKi87IH07CisJCTdDMDRGRTZBMUU0M0Q1MkIwMDdG
Q0IyNCAvKiBKU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTUxMUU0M0MyQTIwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAqLzsgfTsKKwkJN0MwNEZF
NkIxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFN0cmluZ3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFM0YxRTQyRjM0MzAwN0ZD
QjI0IC8qIEpTRE9NQ29udmVydFN0cmluZ3MuY3BwICovOyB9OworCQk3QzA0RkU2QzFFNDNENTJC
MDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5ncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFM0QxRTQyRDUwMDAwN0ZDQjI0IC8qIEpTRE9N
Q29udmVydFN0cmluZ3MuaCAqLzsgfTsKKwkJN0MwNEZFNkQxRTQzRDUyQjAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydFVuaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzA0RkU0RDFFNDNCODA1MDA3RkNCMjQgLyogSlNET01Db252ZXJ0VW5pb24uaCAq
LzsgfTsKKwkJN0MwNEZFNkUxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFZhcmlhZGlj
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU1
MjFFNDNDMkNCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0VmFyaWFkaWMuaCAqLzsgfTsKKwkJN0Mw
NEZFNkYxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFdlYkdMLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU1MzFFNDNDMkNCMDA3RkNC
MjQgLyogSlNET01Db252ZXJ0V2ViR0wuaCAqLzsgfTsKKwkJN0MwNEZFNzAxRTQzRDUyQjAwN0ZD
QjI0IC8qIEpTRE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNTQxRTQzQzJDQjAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oICovOyB9OwogCQk3QzE4NDNGRDFDOEI3MjgzMDAy
RUI5NzMgLyogQXV0b2ZpbGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MxODQzRkIxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmNwcCAqLzsg
fTsKIAkJN0MxODQzRkUxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzE4NDNGQzFDOEI3MjgzMDAyRUI5
NzMgLyogQXV0b2ZpbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3QzFFOTcyNzFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdD
MUU5NzI1MUE5Rjk4MzQwMDdCRjBGQiAvKiBBdXRvRmlsbEJ1dHRvbkVsZW1lbnQuY3BwICovOyB9
OwpAQCAtMTAzOTcsNiArMTA0MjQsMzMgQEAKIAkJN0FGOUIyMEExOENGQjVGMzAwQzY0QkVGIC8q
IEpTVlRUUmVnaW9uTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1ZUVFJlZ2lvbkxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5
QjIwQjE4Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRUUmVnaW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzA0MDYxMjFDNjZFRTlDMDBBRjA3MTEgLyogTlNTY3JvbGxlckltcFNQSS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOU1Njcm9sbGVySW1wU1BJLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTNCMUU0MkQ1MDAwMDdGQ0IyNCAvKiBK
U0RPTUNvbnZlcnRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9N
Q29udmVydEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFM0MxRTQy
RDUwMDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0TnVtYmVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzA0RkUzRDFFNDJENTAwMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5n
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRTdHJpbmdz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTNFMUU0MkYyMUYwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnROdW1iZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRE9NQ29udmVydE51bWJlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzA0RkUzRjFFNDJGMzQzMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5ncy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUNvbnZlcnRTdHJp
bmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDAxRTQyRjQxQTAw
N0ZDQjI0IC8qIEpTRE9NQ29udmVydERhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNET01Db252ZXJ0RGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzA0RkU0MTFFNDJGNEEyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUNvbnZlcnREYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDIxRTQyRjYzQzAwN0ZDQjI0IC8qIEpTRE9N
Q29udmVydEludGVyZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RP
TUNvbnZlcnRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZF
NDMxRTQyRjc2ODAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDQxRTQzQjUxMTAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydEFueS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNv
bnZlcnRBbnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDUxRTQzQjUx
MTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEJvb2xlYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01Db252ZXJ0Qm9vbGVhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzA0RkU0NjFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGljdGlvbmFy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnREaWN0aW9u
YXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTQ3MUU0M0I1MTEwMDdG
Q0IyNCAvKiBKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzA0RkU0ODFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVsbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnROdWxsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTQ5MUU0M0I1MTEwMDdGQ0IyNCAvKiBK
U0RPTUNvbnZlcnROdWxsYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0RPTUNvbnZlcnROdWxsYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzA0
RkU0QTFFNDNCNTEyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0T2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29udmVydE9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3QzA0RkU0QjFFNDNCNTEyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0
U2VxdWVuY2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29udmVy
dFNlcXVlbmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzA0RkU0QzFFNDNC
N0MzMDA3RkNCMjQgLyogSlNET01Db252ZXJ0UmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NQ29udmVydFJlY29yZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzA0RkU0RDFFNDNCODA1MDA3RkNCMjQgLyogSlNET01Db252ZXJ0VW5pb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0VW5pb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNEUxRTQzQzE1MjAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydENhbGxiYWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0RPTUNvbnZlcnRDYWxsYmFja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0Mw
NEZFNEYxRTQzQzI1MDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzA0RkU1MDFFNDNDMjUwMDA3RkNCMjQg
LyogSlNET01Db252ZXJ0SlNPTi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0RPTUNvbnZlcnRKU09OLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTUx
MUU0M0MyQTIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0U2VyaWFsaXplZFNj
cmlwdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTUyMUU0M0My
Q0IwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRWYXJpYWRpYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRWYXJpYWRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzA0RkU1MzFFNDNDMkNCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0V2ViR0wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0V2ViR0wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNTQxRTQzQzJDQjAwN0ZDQjI0IC8q
IEpTRE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0MwNEZFNTUxRTQzQzM2NDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEluZGV4
ZWREQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRJbmRl
eGVkREIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxODQzRkIxQzhCNzI4MzAw
MkVCOTczIC8qIEF1dG9maWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEF1dG9maWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MxODQzRkMx
QzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF1dG9maWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMUU5NzI1
MUE5Rjk4MzQwMDdCRjBGQiAvKiBBdXRvRmlsbEJ1dHRvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDAwLDggKzE1NDU0LDYgQEAKIAkJCQk1Q0RE
ODMzQzFFNDMyNEJCMDA2MjFFOTIgLyogUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlLmggKi8s
CiAJCQkJMDc3MDdDQjExRTIwNjQ5QzAwMDA1QkY3IC8qIEF1ZGlvQ2FwdHVyZVNvdXJjZVByb3Zp
ZGVyT2JqQy5oICovLAogCQkJCTA3NzA3Q0FGMUUyMDVFQzQwMDAwNUJGNyAvKiBBdWRpb1NvdXJj
ZU9ic2VydmVyT2JqQy5oICovLAotCQkJCTA3QzA0NkM1MUU0MjUxMkYwMDcyMDFFNyAvKiBBdWRp
b1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtQ29jb2EuY3BwICovLAotCQkJCTA3QzA0NkM2MUU0MjUx
MkYwMDcyMDFFNyAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtQ29jb2EuaCAqLywKIAkJ
CQkwNzAzNjNEODE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UuaCAqLywK
IAkJCQkwNzAzNjNEOTE4MUExQ0RDMDBDMDc0QTUgLyogQVZBdWRpb0NhcHR1cmVTb3VyY2UubW0g
Ki8sCiAJCQkJMDcwMzYzREExODFBMUNEQzAwQzA3NEE1IC8qIEFWQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCAqLywKQEAgLTIyMjkzLDYgKzIyMzQ1LDMzIEBACiAJCQkJN0M0NUM5Q0QxRTNFOTAwQjAw
QUFCNTU4IC8qIEpTRE9NQ29uc3RydWN0b3IuY3BwICovLAogCQkJCTQxM0MyQzMzMUJDMjlBN0Iw
MDc1MjA0QyAvKiBKU0RPTUNvbnN0cnVjdG9yLmggKi8sCiAJCQkJOTMwODQxMzMxQ0REQjE1NTAw
QjA5NThDIC8qIEpTRE9NQ29udmVydC5oICovLAorCQkJCTdDMDRGRTQ0MUU0M0I1MTEwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnRBbnkuaCAqLywKKwkJCQk3QzA0RkUzQjFFNDJENTAwMDA3RkNCMjQg
LyogSlNET01Db252ZXJ0QmFzZS5oICovLAorCQkJCTdDMDRGRTQ1MUU0M0I1MTEwMDdGQ0IyNCAv
KiBKU0RPTUNvbnZlcnRCb29sZWFuLmggKi8sCisJCQkJN0MwNEZFNDMxRTQyRjc2ODAwN0ZDQjI0
IC8qIEpTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oICovLAorCQkJCTdDMDRGRTRFMUU0M0MxNTIw
MDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRDYWxsYmFja3MuaCAqLywKKwkJCQk3QzA0RkU0MTFFNDJG
NEEyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5jcHAgKi8sCisJCQkJN0MwNEZFNDAxRTQy
RjQxQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERhdGUuaCAqLywKKwkJCQk3QzA0RkU0NjFFNDNC
NTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGljdGlvbmFyeS5oICovLAorCQkJCTdDMDRGRTQ3
MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oICovLAorCQkJCTdD
MDRGRTRGMUU0M0MyNTAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRFdmVudExpc3RlbmVyLmggKi8s
CisJCQkJN0MwNEZFNTUxRTQzQzM2NDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEluZGV4ZWREQi5o
ICovLAorCQkJCTdDMDRGRTQyMUU0MkY2M0MwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJbnRlcmZh
Y2UuaCAqLywKKwkJCQk3QzA0RkU1MDFFNDNDMjUwMDA3RkNCMjQgLyogSlNET01Db252ZXJ0SlNP
Ti5oICovLAorCQkJCTdDMDRGRTQ4MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdWxs
LmggKi8sCisJCQkJN0MwNEZFNDkxRTQzQjUxMTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51bGxh
YmxlLmggKi8sCisJCQkJN0MwNEZFM0UxRTQyRjIxRjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51
bWJlcnMuY3BwICovLAorCQkJCTdDMDRGRTNDMUU0MkQ1MDAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZl
cnROdW1iZXJzLmggKi8sCisJCQkJN0MwNEZFNEExRTQzQjUxMjAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydE9iamVjdC5oICovLAorCQkJCTdDMDRGRTRDMUU0M0I3QzMwMDdGQ0IyNCAvKiBKU0RPTUNv
bnZlcnRSZWNvcmQuaCAqLywKKwkJCQk3QzA0RkU0QjFFNDNCNTEyMDA3RkNCMjQgLyogSlNET01D
b252ZXJ0U2VxdWVuY2VzLmggKi8sCisJCQkJN0MwNEZFNTExRTQzQzJBMjAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oICovLAorCQkJCTdDMDRGRTNGMUU0MkYz
NDMwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRTdHJpbmdzLmNwcCAqLywKKwkJCQk3QzA0RkUzRDFF
NDJENTAwMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5ncy5oICovLAorCQkJCTdDMDRGRTRE
MUU0M0I4MDUwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRVbmlvbi5oICovLAorCQkJCTdDMDRGRTUy
MUU0M0MyQ0IwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRWYXJpYWRpYy5oICovLAorCQkJCTdDMDRG
RTUzMUU0M0MyQ0IwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRXZWJHTC5oICovLAorCQkJCTdDMDRG
RTU0MUU0M0MyQ0IwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaCAqLywK
IAkJCQk3QzQ1QzlDQzFFM0U4RjA4MDBBQUI1NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5j
cHAgKi8sCiAJCQkJN0M0NUM5QzcxRTNFOEFGRjAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaCAqLywKIAkJCQlFMUMzNkNCQzBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxP
YmplY3QuY3BwICovLApAQCAtMjUxODAsNiArMjUyNTksNyBAQAogCQkJCTUxMkREOEY4MEQ5MUU2
QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGRDU2ODZDQTEzQUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRpb0RlY29kZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxQ0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJl
YW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDRGRTZDMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RP
TUNvbnZlcnRTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZENEQ2MTE4NjUxRkEzMDA1
MTJGNkUgLyogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThDNEE4MEQwOUQ1NjMyNzAwMDNBQzhEIC8qIEF0dHIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QzRBODBCMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyaWJ1dGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MjUzMDEsNiArMjUzODEsNyBAQAogCQkJCUY1NUIzREIwMTI1MUYxMkQwMDNFRjI2OSAvKiBCdXR0
b25JbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5Q0Y4MEQ3RTJCODIwMDdDMzk4
MyAvKiBjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUNGQTBEN0UyQjgyMDA3QzM5
ODMgLyogY19pbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNTYxRTQzRDUyQTAw
N0ZDQjI0IC8qIEpTRE9NQ29udmVydEFueS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlDRkMw
RDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlD
RkUwRDdFMkI4MjAwN0MzOTgzIC8qIGNfdXRpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNC
MTZDMUEwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZENTU1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjUzMzIsNiArMjU0MTMsNyBAQAogCQkJCUZCMkMxNUMzMTY1RDY0OUQwMDM5QzlG
OCAvKiBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUMw
OTM5RUIxQTEzRTEyOTAwQjc4OEU1IC8qIENhY2hlZFNWR0ZvbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA3NTM4NjAzMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdDMDRGRTVBMUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRDYWxs
YmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQjE2QzI4MDk3OUMzQkQwMDQ2Nzc0MSAvKiBD
YWNoZWRYU0xTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTk1MDA4MjQ1RTU5
MDAxRTlBQkMgLyogQ2FjaGVQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0M0FGOEU3MUFD
NUI3RUMwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjUz
NjQsNiArMjU0NDYsNyBAQAogCQkJCUZEMzE1RkZGMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVs
TWVyZ2VyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMDIxMkIwMjY3NjAwQzFBMzU5
IC8qIENoYW5uZWxTcGxpdHRlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTBCNkEwMDk5
REYwMjcwMDkwRDc4MSAvKiBDaGFyYWN0ZXJEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0
RkU2OTFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U2VxdWVuY2VzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDNTU5MkY3ODFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGll
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJh
Y3RlclJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJB
MEQwMDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTUy
Nyw2ICsyNTYxMCw3IEBACiAJCQkJQkNFQTQ3OTAwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOURBQzdDNTUxQUYyQ0FB
MjAwNDM3QzQ0IC8qIENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ4RkVCREQxNDNFM0VGNzAwNzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3QzA0RkU1NzFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENT
U0N1cnNvckltYWdlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDRDQkU0MUQ4ODYxOTkw
MDczQTA3NCAvKiBDU1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzNC
ODc2OTFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1NjUyLDYgKzI1NzM2LDcgQEAKIAkJCQlBNTczMkIwQjEzNkExNjFEMDA1QzhE
N0MgLyogRGF0ZUNvbXBvbmVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREI2MTI1MUYx
MkQwMDNFRjI2OSAvKiBEYXRlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NTNFQjYz
NzE1OUM1NzA0MDAwMDFCQjcgLyogRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDMDRGRTcwMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREI4MTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGlt
ZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQkExMjUxRjEyRDAwM0VGMjY5
IC8qIERhdGVUaW1lTG9jYWxJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkExMkJF
MUEwMDkyMzcwMEM2REU3MiAvKiBEZWJ1Z1BhZ2VPdmVybGF5cy5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTY4Niw2ICsyNTc3MSw3IEBACiAJCQkJMzE0MDM3OUQxMjRCRUE3RjAwQUY0MEU0IC8qIERl
dmljZU9yaWVudGF0aW9uQ2xpZW50SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OTMwOUExMzEx
RjRBRTZBMDAyNTA2MDMgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1OUE4RjFENjExQTY5NTEzMDAxQUMzNEEgLyogRGV2aWNlT3JpZW50YXRpb25D
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU2MzFFNDNENTJBMDA3RkNCMjQg
LyogSlNET01Db252ZXJ0TnVsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTkwRTFCNDkxMUU0RUY0
QjAwNjlGNzg0IC8qIERldmljZU9yaWVudGF0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTlBODVFQTQxMTlENjhFQzAwREVGMUVGIC8qIERldmljZU9yaWVudGF0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTI2NzcyNUZEMUE1QjNBRDkwMDNDMjRERCAvKiBERkEuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjU3MzIsNiArMjU4MTgsNyBAQAogCQkJCTRBNEY0OEFBMTZCMERGQzAwMEVE
QkIyOSAvKiBEb2N1bWVudFJ1bGVTZXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDZFNzFBRDE2
Njg4OTlEMDAzMjBDMTMgLyogRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQjkwNTYxQTBGMjU3OEJGMDA5NUZGNkEgLyogRG9jdW1lbnRUaHJlYWRhYmxlTG9h
ZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU1RjFFNDNENTJBMDA3RkNCMjQgLyogSlNE
T01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTIyMUUwNEIxQkZD
M0QyQzAwNkExQTAwIC8qIERvY3VtZW50VGltZWxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
RDk4MkY3MTI1QzE1NDAwMEFEOUUzRCAvKiBEb2N1bWVudFRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgxODVGMzkwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50VHlwZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yNTg0NCw2ICsyNTkzMSw3IEBACiAJCQkJMjYyRUM0MUExRDA3OEZCOTAwQkE3
OEZDIC8qIEV2ZW50VHJhY2tpbmdSZWdpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0QxOTYz
MzFENkNBQjgyMDBGQzdFNDcgLyogRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYw
RDhGMzBEMkExMUUwMDBCOTkxOEYgLyogRXhjZXB0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJN0MwNEZFNkUxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFZhcmlhZGljLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzVGQkNGMjA5QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0aW9uQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTczREM2NDAxNDVBOTQwOTAwMjg0MkMyIC8qIEV4Y2Vw
dGlvbkNvZGVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2N0NFMEIxNDVBQkMx
MzAwNUU2NERCIC8qIEV4Y2VwdGlvbkhlYWRlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjYxMDgs
NiArMjYxOTYsNyBAQAogCQkJCUE4MTM2OURDMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0aW9u
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxMzY5REEwOTczNzRGNjAwRDc0NDYzIC8q
IEhUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEFEMDEwMDkxMjdF
NjQyQTAwMTUwMzVGIC8qIEhUTUxPdXRwdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QzA0RkU2NzFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0T2JqZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEVBN0NCNTBBMTkyQjlDMDBBOEVGNUYgLyogSFRNTFBhcmFncmFwaEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFENDU4MEExMjdDQkMwMEIxMkE2OCAvKiBIVE1M
UGFyYW1FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0UyQTMwNzEyM0U5REMwMDA5RkUx
MkEgLyogSFRNTFBhcnNlcklkaW9tcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjIyNyw2ICsyNjMx
Niw3IEBACiAJCQkJQjI3NTM1NzAwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNUQxRTQzRDUyQTAwN0ZDQjI0IC8qIEpT
RE9NQ29udmVydERpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyQkQ5RjdGMTM1MzYy
NUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTIyQkQ5
RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVt
ZW50TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MjgzLDYgKzI2MzczLDcgQEAKIAkJCQk5MzMw
OURGMDA5OUU2NDkyMDA1NkU1ODEgLyogSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERjIwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydFRl
eHRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODg1RThENTExRTA2REQyMDA5RkZCRjQg
LyogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
QzA0RkU2MjFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0SlNPTi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUM4MUI5NUMwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQUIxNzQ0MTI0Qjk5RUMwMEM1MDY5RCAv
KiBJbnNwZWN0b3JDU1NBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzI0Nyw2ICsyNzMzOCw3
IEBACiAJCQkJQzZGMDhGQkQxNDMwRkU4RjAwNjg1ODQ5IC8qIE11dGF0aW9uUmVjb3JkLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MkI2QzlDNjE1RTNGNERGMDA2OTBCMDUgLyogTmFtZWRGbG93Q29s
bGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE0QkUzQTcxQjMxMDNGQjAwMTQxOTgyIC8q
IE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNjYx
RTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51bWJlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4MTg3MjIzMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lZE5vZGVNYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4MTg3MjFFMDk3N0QzQzAwMDU4MjZEOSAvKiBOYW1lTm9kZUxpc3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBOYXRpdmVJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNzQ5Myw2ICsyNzU4NSw3IEBACiAJCQkJRTQ0NjEzRUMwQ0Q2
ODFCNTAwRkFEQTc1IC8qIFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MTVF
NjUzMTM0QkJCRUMwMEQ4RTcxMyAvKiBQcm9ncmVzc1NoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBMkE2ODI0MEI1QkVERTcwMDAyQTQ4MCAvKiBQcm9ncmVzc1RyYWNrZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTdDMDRGRTVFMUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZl
cnRFbnVtZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDQURENzkxODgwRDkxQzAwRDhC
NzFEIC8qIFByb2dyZXNzVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRCQkVE
MEYxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzdCQUFFNTgxOTgwRDFERDAwNURGRTcxIC8qIFByb3RlY3Rpb25T
cGFjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzU2Myw2ICsyNzY1Niw3IEBACiAJCQkJODM2REFB
MDYxQ0VBQjgwRDAwQTJCNzA3IC8qIFJlbmRlckRlc2NlbmRhbnRJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRDMwMjc1NEExMkE1RkU4NDAwNEJEODI4IC8qIFJlbmRlckRldGFpbHNNYXJr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkU1RjdGMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5k
ZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU2MDFFNDNENTJB
MDA3RkNCMjQgLyogSlNET01Db252ZXJ0SW5kZXhlZERCLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
QjMyQ0RBOTEzREY3RkE5MDBGMzREMTMgLyogUmVuZGVyZWRQb3NpdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQzQTAyM0IxN0VCMzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNUI3QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRl
ZE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzcyOCw2ICsyNzgyMiw3IEBACiAJCQkJQURC
QUQ2RUYxQkNERDk1NzAwMzgxMzI1IC8qIFJlc291cmNlVXNhZ2VPdmVybGF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTA3MUU4NzFDNTZEMEUxMDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZVRocmVh
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTUxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVy
Yi5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNjExRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9N
Q29udmVydEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwQTcxMkIwMjZGNzAw
QzFBMzU5IC8qIFJldmVyYkFjY3VtdWxhdGlvbkJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQzMTYwQTkxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkNvbnZvbHZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQzMTYwQUIxMkIwMjZGNzAwQzFBMzU5IC8qIFJldmVyYkNvbnZvbHZlclN0YWdl
LmggaW4gSGVhZGVycyAqLywKQEAgLTI3NzQ2LDYgKzI3ODQxLDcgQEAKIAkJCQkwNzhFMDkyMDE3
RDE0RDFDMDA0MjBBQTEgLyogUlRDRFRNRlNlbmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4
RTA5M0UxN0QxNkUxQzAwNDIwQUExIC8qIFJUQ0RUTUZTZW5kZXJIYW5kbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwNzhFMDkzRjE3RDE2RTFDMDA0MjBBQTEgLyogUlRDRFRNRlNlbmRlckhhbmRs
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDRGRTU5MUU0M0Q1MkEwMDdGQ0IyNCAv
KiBKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3OEUwOTIx
MTdEMTREMUMwMDQyMEFBMSAvKiBSVENEVE1GVG9uZUNoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNzhFMDkyMzE3RDE0RDFDMDA0MjBBQTEgLyogUlRDSWNlQ2FuZGlkYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzhFMDk0MDE3RDE2RTFDMDA0MjBBQTEgLyogUlRDSWNlQ2FuZGlk
YXRlRGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg0Miw3ICsyNzkzOCw3IEBACiAJ
CQkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVBM0U4MDE5MUIzMTY5MDAwRjFCNTUgLyogU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5MUE5OUQxNjI5RDcw
MDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0
cmVhbUNvY29hLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0MwNDZDODFFNDI1MTU1MDA3MjAxRTcg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCODg5MEExNjdEMkZBMTAwMTBDREE1IC8q
IFNjcm9sbGluZ1RyZWVTdGlja3lOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUFGRThEMDE5
Q0I4NjcyMDAwRjU2RDggLyogU2Nyb2xsTGF0Y2hpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjQ3ODc1NTQxOTk4M0FGRjAwMjRBMjg3IC8qIFNjcm9sbFNuYXBBbmltYXRvclN0YXRlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI3ODkzLDYgKzI3OTg5LDcgQEAKIAkJCQlGRDQ1QTk0RjE3NUQz
RjNFMDBDMjFFQzggLyogU2hhcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENDVBOTVCMTc1RDQx
RUUwMEMyMUVDOCAvKiBTaGFwZUludGVydmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDQ1QTk1
MjE3NUQzRjNFMDBDMjFFQzggLyogU2hhcGVPdXRzaWRlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJN0MwNEZFNjQxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51bGxhYmxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogU2hhcGVWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCMUYwMkYxM0IwMjVEMjAwRjUxMDNGIC8qIFNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MDE1LDYgKzI4MTEy
LDcgQEAKIAkJCQlCQzVFQjc0RTBFODFFMDY3MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0REFDRTZBMUQxMkUxMEIwMDc1OTgwRiAvKiBTdHlsZVBl
bmRpbmdSZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNDVDOUQ2MUUzRkNCRjgwMEFB
QjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0
RkU1QzFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTgwRTZERkMwQTE5OTA2NzAwN0ZCOEM1IC8qIFN0eWxlUHJvcGVydGllcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTFCMjUxMDcxNTJBMEJCMDAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlT
aG9ydGhhbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzA1QTVCMUE2ODYyMTIwMDdFNURFQSAv
KiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTI4
MTQxLDYgKzI4MjM5LDcgQEAKIAkJCQlCMjIyN0EwRjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIy
N0ExMjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkExRjJBQjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdDMDRGRTZEMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRVbmlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0Zv
bnRGYWNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTgwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZvbnRGYWNlRm9ybWF0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIy
MjdBMUIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRGYWNlTmFtZUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjg1MzMsNiArMjg2MzIsNyBAQAogCQkJCUExNDgzMkNDMTg3RjY3QzQwMERB
NjNBNiAvKiBXZWJDb3JlVGhyZWFkUnVuLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDRDE4
N0Y2ODJFMDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZFNhZmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNDgzMkNGMTg3RjY4NDcwMERBNjNBNiAvKiBXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU2RjFFNDNENTJCMDA3RkNCMjQgLyogSlNET01D
b252ZXJ0V2ViR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDk5RDA5MTdCOTY4QTEwMEZGODRC
OSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
RjgxOEZEMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ0QTIwREI5MEY4NDE2NkMwMEIzRTFGRSAvKiBXZWJDb3JlVVJMUmVzcG9uc2VJ
T1MuaCBpbiBIZWFkZXJzICovLApAQCAtMjg2MDgsNiArMjg3MDgsNyBAQAogCQkJCUNEQTI5QTBG
MUNCRDlDRkUwMDkwMUNDRiAvKiBXZWJQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlDQzBCNkIxOEJFQTFGRjAwNkNFQkNDIC8qIFdlYlJlcGxh
eUlucHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUNBRjM0ODEwQTZDNDA1MjAwQUJFMDZFIC8q
IFdlYlNjcmlwdE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNkExRTQzRDUyQjAw
N0ZDQjI0IC8qIEpTRE9NQ29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUNBRjM0ODMwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDFCMEQ3RTJCODIwMDdDMzk4MyAvKiBXZWJT
Y3JpcHRPYmplY3RQcm90b2NvbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJEMUIxNEZBMDlE
NTAwNzQ1N0FFIC8qIFdlYlNvY2tldC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODY2MSwxMSArMjg3
NjIsMTMgQEAKIAkJCQlBNTU2MzlEMTFDNkYwOUUzMDA4MDZEOEUgLyogV29ya2VyQ29uc29sZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUyQTY4NjYxREJENEI1RDAwODMzNzNGIC8qIFdv
cmtlckRlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEzRTI2NDMxMTQ3NDg5OTEw
MDVBODU4OCAvKiBXb3JrZXJFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU2
ODFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0UmVjb3JkLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyRTQzNDY0OTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyR2xvYmFsU2NvcGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQ0I0MUJCNEM0RTgwMDEyODk4RiAvKiBXb3JrZXJHbG9iYWxT
Y29wZUluZGV4ZWREYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdGOEU2NjYxNTFENEE0
RTAwRDJEMTgxIC8qIFdvcmtlckdsb2JhbFNjb3BlTm90aWZpY2F0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkU0MzQ2NEIwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlckdsb2JhbFNjb3BlUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NEEwQzYyMURCN0Y4QzEwMDE3QTkwQiAvKiBXb3Jr
ZXJJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU1ODFFNDNE
NTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0Qm9vbGVhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU0QTBDNkMxREI4MzFGOTAwMTdBOTBCIC8qIFdvcmtlckluc3BlY3RvclByb3h5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxOEY4MzFCODBGRDQ4Qzc4MDBEOEM1NkIgLyogV29ya2VyTG9hZGVyUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFNDM0NjREMEY1NDZBODIwMEIwRjFCQSAvKiBXb3Jr
ZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTM5MCw2ICsyOTQ5Myw3IEBACiAJCQkJ
RTEyNUY4NjMxODJDMzAzQTAwRDg0Q0Q5IC8qIENyeXB0b0tleURhdGFPY3RldFNlcXVlbmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxQzI2NkRFMTgzMTlGMzEwMDNGOEIzMyAvKiBDcnlwdG9L
ZXlEYXRhUlNBQ29tcG9uZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTI1RjgzNTE4MjJG
MThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzA0
RkU2QjFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5ncy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFMTlBQzNGOTE4MjU2NkY3MDAzNDk0MjYgLyogQ3J5cHRvS2V5TWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTU3RTIzMzZCMURDQzI2MjQwMEYyOEQwMSAvKiBDcnlwdG9LZXlS
U0EuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2NEZBQTUxODMxNUUxQTAwREI0RTYxIC8qIENy
eXB0b0tleVJTQU1hYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NTIxLDYgKzI5NjI1LDcgQEAK
IAkJCQlGRDA2REZBNTEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDJCMTJCMDI2NzYwMEMxQTM1OSAvKiBE
ZWxheURTUEtlcm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAyRDEyQjAyNjc2MDBD
MUEzNTkgLyogRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDMDRGRTVCMUU0M0Q1
MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnREYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZE
MzE2MDMwMTJCMDI2NzYwMEMxQTM1OSAvKiBEZWxheVByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzMwOURERTA5OUU2NDkyMDA1NkU1ODEgLyogRGVsZXRlRnJvbVRleHROb2RlQ29t
bWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFMDA5OUU2NDkyMDA1NkU1ODEgLyog
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwNzU3LDYgKzMw
ODYyLDcgQEAKIAkJCQkwNzg0NjM0MjE0NUIxNTFBMDBBNThERjEgLyogSlNUcmFja0V2ZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUxN0I0OTIyMTZBOUI4RkYwMDFDODgzOSAvKiBKU1RyYW5z
aXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTc1MEQ1QzBBOTBERUUxMDAwRkYy
MTUgLyogSlNUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDMDRGRTY1MUU0M0Q1
MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdW1iZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTUxNkJCNzk0MENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg2NjI5RDAwOURBMkI0ODAwOTYzM0E1IC8qIEpTVUlFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0NjUzMDdEMTFEQjZFRTRBMDBFNDEzN0MgLyogSlNVSUV2ZW50
SW5pdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMyMTAzLDcgKzMyMjA5LDcgQEAKIAkJCQk0OUM3
QjlFNTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTZGOTk1QTIzMUE3MDc4QjEwMEE3MzVGNCAvKiBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBDM0YxRjVBMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVu
aWZvcm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwN0MwNDZDNzFFNDI1MTU1MDA3
MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbUNvY29hLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTA3QzA0NkM3MUU0MjUxNTUwMDcyMDFFNyAvKiAobnVsbCkgaW4gU291cmNlcyAq
LywKIAkJCQk2Rjk5NUEyNTFBNzA3OEIxMDBBNzM1RjQgLyogV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2RjIyMkI3NjFBQjUyRDhBMDA5NDY1MUEgLyogV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzdBMTdBNzcx
MkYyODY0MjAwNEUwMkY2IC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjExNjQyKQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAiSURC
SW5kZXhJbmZvLmgiCkBAIC0xNTEsOCArMTUyLDExIEBAIHN0YXRpYyBSZWZQdHI8SURCS2V5PiBj
cmVhdGVJREJLZXlGcm9tVmEKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoJmV4ZWMpKTsK
IAotICAgIGlmICh2YWx1ZS5pbmhlcml0cyh2bSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpICYmICFz
dGQ6OmlzbmFuKHZhbHVlVG9EYXRlKCZleGVjLCB2YWx1ZSkpKQotICAgICAgICByZXR1cm4gSURC
S2V5OjpjcmVhdGVEYXRlKHZhbHVlVG9EYXRlKCZleGVjLCB2YWx1ZSkpOworICAgIGlmICh2YWx1
ZS5pbmhlcml0cyh2bSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKSB7CisgICAgICAgIGF1dG8gZGF0
ZVZhbHVlID0gdmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpOworICAgICAgICBpZiAoIXN0ZDo6aXNu
YW4oIWRhdGVWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKGRh
dGVWYWx1ZSk7CisgICAgfQogCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTQxNSwxOSArNDE5LDYgQEAg
dm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhlY1N0YXRlJgogICAgIG91dEtleSA9IElu
ZGV4S2V5KFdURk1vdmUoa2V5RGF0YXMpKTsKIH0KIAotSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8SURCS2V5UGF0aD4mIGtleVBhdGgpCi17Ci0gICAgaWYgKCFrZXlQYXRoKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsm
XShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4gSlNWYWx1ZSB7Ci0gICAgICAgIHJldHVybiB0b0pT
PElETERPTVN0cmluZz4oc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKLSAgICB9LCBbJl0o
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgLT4gSlNWYWx1ZSB7Ci0gICAgICAgIHJldHVy
biB0b0pTPElETFNlcXVlbmNlPElETERPTVN0cmluZz4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZl
Y3Rvcik7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52
YWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJC
aW5kaW5nVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5oCShyZXZpc2lvbiAyMTE2NDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDEwICs0NSw3IEBAIGNsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJWYWx1ZTsKIGNsYXNz
IEluZGV4S2V5OwogY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci1jbGFzcyBUaHJlYWRTYWZlRGF0
YUJ1ZmZlcjsKIAotLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ugd2Ugc3VwcG9ydCByZXR1cm5p
bmcgdW5pb24gdHlwZXMuCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgY29uc3Qgc3RkOjpvcHRpb25hbDxJREJLZXlQYXRoPiYpOwogCiBSZWZQ
dHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoSlND
OjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBi
b29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IEpTQzo6SlNWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTY0MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
Q3J5cHRvLmgiCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNv
bnZlcnRCdWZmZXJTb3VyY2UuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJh
dGlvbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAJKHJldmlzaW9uIDIxMTY0MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShTVUJUTEVfQ1JZUFRPKQogCi0jaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMjExNjQyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTYg
KzIyLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
IAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNvbW1vblZNLmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KLSNpbmNs
dWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC01Niw5OSArNDcsNiBAQCBKU1Zh
bHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBlCiAgICAgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIHMpOwogfQogCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5
dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5n
JiYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0g
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9C
eXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIp
Ci17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmco
KTsKLSAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShz
dHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1v
dmUoc3RyaW5nKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0
ZShTdHJpbmdWaWV3IHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmlu
Z3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vycm9nYXRlcy4KLSAgICBpZiAoc3RyaW5nLmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0
cmluZy5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2lu
dCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJp
bmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8g
dW5wYWlyZWQgc3Vycm9nYXRlcy4KLSAgICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmlu
ZykpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9o
ZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW9idGFpbi11bmljb2RlCi0gICAgLy8gUmVwbGFj
ZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0g
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJp
bmcubGVuZ3RoKCkpOwotICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9OwotICAgIGZvciAo
YXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19T
VVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1l
bnRDaGFyYWN0ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNv
ZGVQb2ludCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3Ry
aW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQotewotICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwot
ICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJp
bmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0
ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBz
dHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi1KU1ZhbHVlIGpzRGF0ZShF
eGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNl
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3Ry
dWN0dXJlKCksIHZhbHVlKTsKLX0KLQotZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAg
cmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52
bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRl
SW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0K
IGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwpAQCAtMTY2LDMxNyArNjQs
NCBAQCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzCiAgICAgcmV0dXJu
ICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgY29uc3QgaW50MzJfdCBr
TWF4SW50MzIgPSAweDdmZmZmZmZmOwotc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0g
LWtNYXhJbnQzMiAtIDE7Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZm
ZmZmZmZVOwotc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAw
MDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNl
bnRhYmxlIGluIEVDTUFTY3JpcHQuCi0KLXN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhk
b3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCi17Ci0gICAgcmV0dXJuIG1ha2VT
dHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwg
IiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0i
KTsKLX0KLQotc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91
YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhp
bXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAg
aWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotc3RydWN0IEludFR5cGVMaW1pdHMgewotfTsKLQotdGVtcGxhdGUgPD4KLXN0
cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWlu
VmFsdWUgPSAtMTI4OwotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07
Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1
Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZh
bHVlID0gLTMyNzY4OwotICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3Owot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2
Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91
bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVk
ZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhl
IHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJh
bmdlLgotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBkID0gdmFs
dWUuYXNJbnQzMigpOwotICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYg
ZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1
ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAg
ICAgfQotICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OwotCi0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJu
IGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFp
dDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsK
LSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZs
b29yKGZhYnMoeCkpOwotICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
cyk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1
ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNp
Z25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25s
eSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJ
bnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFs
dWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5n
ZS4KLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBkID0gdmFs
dWUuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxU
Pih4KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8
ICF4KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgp
KSA6IGZsb29yKGZhYnMoeCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExp
bWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwotfQotCi1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJh
bmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5n
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcCk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0v
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKLWludDhfdCB0b0ludDgoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50
PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKLXVp
bnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi1pbnQxNl90IHRvSW50MTZFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJV
SW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19
Ci0KLXVpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAotaW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAot
dWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtbG9uZwotaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01h
eEludDMyKTsKLX0KLQotaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4g
dmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19
Ci0KLXVpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFz
VUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8v
IGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwotdWludDMyX3Qg
dG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4g
dmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0RW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLXVpbnQ2NF90IHRvVUlu
dDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0Q2xhbXAo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwg
LWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3Vi
bGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtbG9uZy1sb25nCi1pbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUg
dmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJs
ZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7
IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZy5oCShyZXZpc2lvbiAyMTE2NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMjQgKzI5LDE4IEBACiAj
aW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJ
bmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVk
ZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9y
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9Xcml0ZUJhcnJpZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKLS8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBl
YXNpZXIgdG8gcmVhZCBieSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhl
IHRvcCwKLS8vIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxh
dGUgYW5kIGlubGluZSBmdW5jdGlvbnMuCi0KIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgSlNGdW5j
dGlvbjsKIH0KQEAgLTYxLDEyMSArNTUsMjIgQEAgSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRl
ZmluZWQoSlNDOjpFeAogLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29s
bGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4K
IEpTQzo6SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJik7CiAKLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0
eU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1
ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gVGhlIGZv
bGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBX
ZWJJREwgc3BlY2lmaWNhdGlvbi4KLS8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1
ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMg
c3BlY2lmaWVkLAotLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0
aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCi0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZv
cmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQg
dWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9S
VCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3Qg
dG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50
NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1
aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
V0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2
NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRf
dCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLUpTQzo6SlNWYWx1
ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUpOwotCi0vLyBOYU4gaWYgdGhl
IHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCi1kb3VibGUgdmFsdWVUb0RhdGUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlND
OjpBcnJheUJ1ZmZlclZpZXcmKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVy
VmlldyopOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRB
cnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQ4
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlT
aGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWlu
dDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4
Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDE2
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9z
c2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8
SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci0KLVJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJl
ZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6Oklu
dDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJlZEludDMyQXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hh
cmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5z
aGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZs
b2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKLUF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSk7Ci0KIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0b3JNZXRo
b2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2
ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0
aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lKTsKLQotCi0vLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBk
ZWZpbml0aW9ucy4KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYg
YnVmZmVyKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAg
Ly8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSB3
cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6
OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShi
dWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQotewotICAgIHJldHVybiB2aWV3Lndy
YXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
KmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZl
clZpZXcqIHZpZXcpCitpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICp2
aWV3KTsKKyAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKKyAgICByZXR1cm4g
cHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1
YmxpY05hbWUoKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VD4mJiBwdHIpCitpbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7CisgICAgcmV0dXJuIEF0b21pY1N0
cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9u
IG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hp
bmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKKyAgICByZXR1cm4gSlNDOjpKU1Zh
bHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5h
dGl2ZUZ1bmN0aW9uKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCkBAIC0xOTIsNzUgKzg3LDQgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogICAgIHJldHVybiBhcnJheTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6
SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsr
aSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0K
LQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQotewotICAg
IHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgp
KTsKLX0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNo
YXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJW
aWV3Kj4odm0sIHZhbHVlKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiB3cmFwcGVyLT5wb3NzaWJseVNoYXJlZEltcGwoKTsKLX0KLQotaW5s
aW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmll
dyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8gcmVzdWx0ID0g
dG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyh2bSwgdmFsdWUpOwotICAgIGlmICghcmVz
dWx0IHx8IHJlc3VsdC0+aXNTaGFyZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6
OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0
cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWRO
YXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5l
IFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlT
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQot
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRy
PEpTQzo6SW50MTZBcnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJB
cnJheT4gdG9VbnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNo
YXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRV
aW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9y
Pih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFy
ZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5z
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1p
bmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUg
UmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGluZSBTdHJp
bmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQot
ewotICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpOwotICAgIHJldHVybiBwcm9w
ZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpOwotfQotCi1pbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3Ry
aW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gQXRvbWlj
U3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5
TmFtZS5wdWJsaWNOYW1lKCkpOwotfQotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5h
dGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdT
dGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBKU0M6
OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUo
KSwgbmF0aXZlRnVuY3Rpb24pKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgJKHJldmlzaW9uIDIxMTY0
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSwxODc2ICsyNSwyNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9u
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNzIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFt
cCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwg
VHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5
IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVy
YXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4g
cGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0
aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElE
TCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0
cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVk
c1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xv
YmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVl
LCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZh
bHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pT
PFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1
ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAg
IHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2Vw
dGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0
ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlND
OjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0g
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJz
aW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0g
ICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlw
ZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBl
PFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5k
IHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAv
LyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBh
IG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0
aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5
cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBl
bHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1
bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxs
LgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0g
ICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRh
dGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
VDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxs
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJv
b2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJv
b2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwot
ICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBwZWRS
ZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZpZXcg
c3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJu
VHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2Jq
ZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3Qg
VCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxU
Jj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29u
c3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQo
KTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Ci0g
ICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRv
SW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4gewotICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9y
dD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxp
bmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50
MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdM
b25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50NjQoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAg
ICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUp
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJl
cikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkK
LSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0g
ICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRp
YyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAv
LyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
U3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYg
dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFs
dWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVj
dD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB7IHZt
LCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNoSW5JdGVy
YWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNpYWxpemF0
aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1l
bnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCi0g
ICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2Yg
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBFeGVjU3Rh
dGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0g
ICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29u
dmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwot
ICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAg
ICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAg
ICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVz
dWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0
aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBK
U0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBK
U0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluZGV4
aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQo
KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUu
aXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClb
aV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJs
ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUs
IGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBH
ZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlm
ICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpK
U0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFh
cnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9i
c2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1No
YXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3Vv
dXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpT
Qzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVj
dEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1
cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwot
Ci0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
RG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVj
dG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAg
ICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVu
ZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICByZXR1cm4g
SlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExG
cm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJv
emVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsK
LSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5h
cHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgYXV0
byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUo
JmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBSZWNvcmQg
dHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJp
bmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0gICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5z
dHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVu
dGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0
cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICAgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRl
bnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50
YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3Jk
PEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCBy
ZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0gICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8u
W1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtl
eXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmplY3Qt
PmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0
IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgIC8v
IDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KLSAgICAgICAgICAg
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBib29sIGRp
ZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUs
IGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVm
aW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVu
ZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAv
LyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUo
KS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVl
IG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVu
dGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0gICAgICAgICAgICAg
ICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAgICAgICAgICAgYXV0
byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgLy8gMy4g
TGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBl
IFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252
ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA0LiBJ
ZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0
eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVu
IE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0
aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3
aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQu
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
SywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBU
eXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0g
ICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlw
ZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7
Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwg
dmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFw
KSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBF
Q01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCBy
ZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVu
dGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBi
ZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1
dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZh
bHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJv
cGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNyZWF0ZWQg
PSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
a2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6
IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3Jl
YXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rp
b25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERp
Y3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewotICAgICAg
ICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rp
b25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGlj
IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9K
UyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJh
Y2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSks
ICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
ZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmpl
Y3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29u
dmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3Ry
dWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUo
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAg
ICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+
Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAg
IHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxz
ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9u
dCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0
eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVz
ID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
bnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAh
PSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVt
ZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJp
bmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5
cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVz
ICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJy
YXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcg
RGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rp
b25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25h
cnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2lu
ZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBo
YXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNv
cmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBl
cyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
cmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJl
Y29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBl
PjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9m
U2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlv
bmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJm
YWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJy
aWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxs
YWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURM
IHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFs
dWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURM
TnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVk
IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24g
aXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAz
LiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0
aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5
cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1Jl
Y29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5
cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0g
b2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50
ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
dGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBp
cyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdh
bmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsK
LSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAg
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0
eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBS
YXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBX
cmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBl
Pjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNh
c3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9u
VHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChy
ZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQg
b2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3Qo
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
b3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAg
ICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBp
cyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRN
ZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4g
UmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAz
LiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRp
bmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQg
dHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNl
VHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhv
ZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1
cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElm
IG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBh
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQg
dHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRv
cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5B
cnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRv
IHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlv
bmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0
aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVz
IGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBl
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwg
aGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRl
cmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0
aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVj
dCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwg
dGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0
ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYg
KGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVM
aXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUg
PSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYg
KGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBl
LCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAg
ICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAg
IGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVy
aWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBpZiAoaGFz
Qm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBo
YXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAg
ICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
ewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9
IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9
IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjpt
YWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1w
bGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0
byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6
SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNl
PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6
OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAg
ICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCgh
cmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5k
OjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVl
Pih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VS
VChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRl
LCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2Uo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxU
Pj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6
IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQg
TGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVy
ID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0
ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBS
ZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFk
aWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZh
Y2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47
Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigq
cmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZl
cnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3Rv
cjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBh
cmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3Vt
ZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29u
dmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0
SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAg
ICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxs
b3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
aSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpu
dWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QW55LmgiCisj
aW5jbHVkZSAiSlNET01Db252ZXJ0Qm9vbGVhbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJ1
ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydENhbGxiYWNrcy5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydERhdGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnREaWN0aW9uYXJ5
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW5kZXhlZERC
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01D
b252ZXJ0SlNPTi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bGwuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnROdWxsYWJsZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51bWJlcnMuaCIK
KyNpbmNsdWRlICJKU0RPTUNvbnZlcnRPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRS
ZWNvcmQuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRTdHJpbmdzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0VW5pb24uaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnRXZWJHTC5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFhQYXRoTlNSZXNvbHZl
ci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55
LmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0QW55LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZy
b20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
eyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKwor
c3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2Vw
dGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJv
d2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rp
b25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25h
cnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBn
ZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVy
YXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8v
IENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
VSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxp
emVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRz
U3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFs
dWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwg
dGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
eworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0
dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVl
Lmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRo
cm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9i
amVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZh
dWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFs
dWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Cisg
ICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6
UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERl
dGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJ
ZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFs
dWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8g
YW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgor
ICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhl
biByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAg
ICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4g
T3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURM
IG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5l
ciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cisg
ICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxl
PFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVl
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRp
YyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpu
dWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7
CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFu
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBz
dXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlC
dWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIq
OworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5
cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxU
Pj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQo
dm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0Owor
ICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+
KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0
IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5n
ZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25z
dCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJ
bnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
T2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0
ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewor
ICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hv
cnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0
YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAg
c3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwor
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAg
IHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIo
KTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBp
bmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJl
cik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBm
bG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKwor
ICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3Vi
bGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERv
dWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUu
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7Cisg
ICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygm
c3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERP
TVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVz
cGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBW
ZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09i
amVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1
bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1Zh
bHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50
VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJp
YyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0
aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRz
IGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVy
ID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJy
YXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9
IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2Jq
ZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwor
CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hh
cGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAo
c3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXko
b2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQg
ZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRl
eGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6
OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewor
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVj
dG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3Qs
IGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJh
eSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBK
U0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRl
bnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0
eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBl
ID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9
IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEg
bmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlw
ZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVF
cnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAg
ICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAg
ICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
JnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNo
IGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Q
cm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNj
cmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFk
aWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0g
aXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQg
dG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBi
eSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAg
ICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBr
ZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAg
YXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChz
dGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChP
LCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZl
cnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlw
ZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBp
biByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAv
LyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBp
bmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEg
T2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVw
ZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVz
S2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAg
IC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0
byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAg
ICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFT
Y3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExl
dCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUp
LgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsK
KworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBU
JiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExF
bnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsK
KyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6
Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5j
dGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFj
a0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENh
bGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5h
YmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUg
UmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBl
bmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNl
PiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250
PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8
TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0
IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBl
ID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRp
dGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4g
VD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVz
aW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51
bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJp
Z2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBl
TGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5n
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExT
dHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmlu
Z1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdU
eXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNl
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlv
bi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNl
VHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3pl
bkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJy
YXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZy
b3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1
ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5B
cnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUg
PSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJy
YXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpz
aXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGlj
dGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25h
bEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNp
bmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3Jk
PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNv
cmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVj
b3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxS
ZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlw
ZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRo
ZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1l
PElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAy
LiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5
cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVu
dGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0
aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBl
LgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBl
LgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRz
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBW
LgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQg
c3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJm
YWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJl
dHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50
ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5k
UmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1
c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5
cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAg
ICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAg
ICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYg
KGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBi
eSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2Ug
aGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2Vx
dWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQg
bWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQs
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0g
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNT
ZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3Ig
PSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJh
eSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRo
b2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0
dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJv
emVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9y
ID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0
aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5
cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYu
IElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0
IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAx
Mi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBl
ID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2Fu
ZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51
bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
bnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUg
PSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlm
IChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlz
dD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgor
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJl
dHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248
VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAg
ICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZm
X3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYg
dmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAg
ICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAg
ICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlw
ZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNE
YXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElE
TEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZh
dWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVl
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Cisg
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0
cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlh
bGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBS
ZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0o
KSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVj
dCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikK
KyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAg
ICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBh
dGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVz
b2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5n
IFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpX
cmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlw
ZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9i
amVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JS
ZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURM
SURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFu
eSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNw
YWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
VmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0g
PSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3Rk
OjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJp
YWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0g
PSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252
ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJ
dGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAg
ICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJl
c3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGgg
PSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisg
ICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1
bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0
byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVu
Z3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55LmgJKHJldmlz
aW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEFu
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxOTYgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+Cisj
aW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFz
cyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0
eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQg
b3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Ci0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
T2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBj
b252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lv
bi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlv
bihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
IGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3Qm
LCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsK
LQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBj
b252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVu
dW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3Ry
dWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVj
dCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYm
IHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQot
ewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFz
RXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CiAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IEpTQzo6SlNWYWx1ZTsKICAgICAKQEAgLTI0NCwxNjU3ICs1OSw0IEBAIHRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8v
IE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElE
TFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAv
LyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJ
REwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWdu
ZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5j
dGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxs
XSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVs
bC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAg
Ly8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0
aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2Us
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRo
ZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURM
TnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAg
IHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
c3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29s
ZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4o
JnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
b29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1
ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlC
dWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsK
LSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0K
LS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJl
ZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVy
ZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJD
bGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2Jq
ZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVm
KGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJl
Zihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9y
dD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
U2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50
MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7
Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQz
MigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
ewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0
YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVt
YmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0g
ICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAg
IH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAg
ICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5p
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRp
YVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7
Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
YmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkg
fTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwg
WyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFs
dWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGlu
Z1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUg
bnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUg
YXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29u
dmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQot
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjpp
c0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xv
YmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsK
LQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNo
YXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMy
KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91
YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVj
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFz
QXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5p
c0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUg
cmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5
LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxP
YmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJl
dHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0
ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBL
ZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVl
VHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4g
SWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBh
IFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpT
Qzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAg
ICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4K
LSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZv
ciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tH
ZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAg
aWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJh
YmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFu
ZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQot
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNj
cmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtl
eSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAg
ICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29u
dmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/
IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1
dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBh
IGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAg
ICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0Lgot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBh
IG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8g
Mi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4g
TGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAg
ICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhl
IGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4K
LQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFu
IEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8v
IDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVz
VmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1Zh
bHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFy
eTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9u
YXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29u
dmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsK
LSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVj
dCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBV
bmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJv
b2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQs
IGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6
ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAg
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2lu
ZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+Owot
ICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVz
aW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1i
ZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51
bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVy
aWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcg
U3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9v
ZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxT
dHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNl
cXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNl
cXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJv
emVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBG
cm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJh
eVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmln
YW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25k
aXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0g
ICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
UmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29y
ZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJl
ck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVj
b3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEu
IElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjpp
c19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVs
bFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVu
aW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1m
bGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29y
ZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBs
ZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVj
dCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAg
ICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6
OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZt
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgot
Ci0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAg
ICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkg
ewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcg
Y29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRo
YXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAx
LiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCku
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRl
ZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VU
eXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3pl
biBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExl
dCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5l
ZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0
ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJh
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIu
NikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xl
YW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwg
YnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBp
cyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJp
Y1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAg
ICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051
bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdU
eXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURM
VW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlz
dDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpw
dHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVl
PjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9u
VHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4
KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwot
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0g
ICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0g
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5k
ZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhp
c09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0
ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAot
ICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURC
S2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBX
ZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQot
bmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1
c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVt
OwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3Ry
dWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAg
fTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBs
ZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5n
dGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUg
RGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QmFzZS5o
CShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklE
QkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJv
bSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7
IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OworCitz
dHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAgeworICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0
aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93
ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlv
bmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFy
eShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xv
YmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Y29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8g
Q29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBV
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlv
bk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNT
dGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1
ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
TnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46
OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpS
ZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBD
b252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0
YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAgIC8vIDEuIElm
IFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1
ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBh
biBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisg
ICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVu
IHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAg
IC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBP
dGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
bnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVy
IElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAg
ICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJs
ZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxP
YmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGlj
IHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51
bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsK
KyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1
cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlND
OjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1
ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7
Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4geworICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlw
ZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7Cisg
ICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4o
cCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3Qg
VCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdl
dCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0
IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElu
dGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
Y3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OEVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3Rl
dD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Cisg
ICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9y
dDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3Rh
dGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBz
dGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAg
c3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigp
OworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVy
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVt
YmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwor
ICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0
aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisg
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4g
bnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJp
bmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
eworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNw
YWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZl
Y3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7
CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3Vs
dF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRU
eXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmlj
IHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRo
YXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMg
YXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIg
PSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJh
eShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
SlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmpl
Y3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisK
KyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgp
LT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFw
ZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShv
YmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJ
dGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBS
ZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBh
Y2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBl
eGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4
aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6
anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Cisg
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
eworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJl
dHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0
b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVs
bHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
dmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmpl
Y3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5
KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVy
Q29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJ
RExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVu
dGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIEtleVR5cGUg
PSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0g
dHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBu
ZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBl
KE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVy
cm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgIAorICAg
ICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAg
ICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAm
c3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2gg
ZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtl
eSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blBy
b3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICBpZiAoIWRp
ZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBp
cyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0
byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5
IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPworCisgICAgICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3Iu
ZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtl
eSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAgICAgICAgICBh
dXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0
YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8s
IGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAgYXV0byB0eXBl
ZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGlu
IHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAgICAgICAgIC8v
IE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGlu
ZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
eyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBP
YmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAvLyAyLiBSZXBl
YXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAgIGZvciAoY29u
c3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNL
ZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAg
Ly8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRv
IGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAg
ICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGds
b2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8gMy4gTGV0
IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSku
CisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwor
CisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQm
IGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51
bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0
YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewor
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2Ug
dHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNr
SW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMo
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFi
bGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+
IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8
TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxM
aXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3Qg
Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUg
PSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9u
YWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNp
bmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVt
ZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmln
YW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVM
aXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0
cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5n
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5
cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5k
OjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VU
eXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRnJvemVu
QXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJh
eTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVl
OworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFy
cmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2lu
ZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8
YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29y
ZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNv
cmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJl
Y29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBl
cykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhl
IHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5k
ZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8
SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIu
IExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlw
ZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50
ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRo
ZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUu
CisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUu
CisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2Jq
ZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYu
CisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBz
dGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZh
Y2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRl
cmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRS
ZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlw
ZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisgICAgICAgICAg
ICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAg
ICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAg
ICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAo
aGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAg
ICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5
IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBo
YXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1
ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBt
ZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwg
cmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Nl
cXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9
IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5
IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhv
ZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAg
ICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96
ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3Ig
PSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRl
cmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4g
SWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDEy
LiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUg
PSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5k
OjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVt
YmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBu
dW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9
IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYg
KGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0
Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxU
Li4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAg
IHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZf
dDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2
YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKwor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAg
IGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAg
ICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBl
KHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkg
eworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0Rh
dGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURM
SlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAg
ICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRy
PFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFs
aXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJl
ZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisg
ICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgp
KTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0
LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxpc3RlbmVyKQor
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgCisgICAgICAg
IHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0
aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcg
V3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46Oldy
YXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBl
Ojp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2Jq
ZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJ
REJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBn
bG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucworCituYW1lc3Bh
Y2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBW
YXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAK
KyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9
IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6
Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9
IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZl
cnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0
ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAg
ICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVz
dWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAgICB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29u
dmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9
IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAg
ICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6
OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OworICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9y
IChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRv
IHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyBsZW5n
dGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QmFzZS5oCShyZXZp
c2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIxICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IElt
cGxlbWVudGF0aW9uCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwogCi1l
bnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3Jj
ZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwogCiBzdHJ1Y3QgRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXIgewogICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCkBAIC01MSwyMCArNDMsMTAgQEAgc3RydWN0IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0
Jik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKIAotLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25h
bDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXMoKTsKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKQEAgLTgwLDE2ICs2Miw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb24KICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCiB7CiAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CkBAIC0xMTYsMTAgKzg4LDYgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIAogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKIAotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmlu
ZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0
YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0Pgogc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKIApAQCAtMjEyLDE2ODkgKzE4
MCw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmUKICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwogfTsKIAotLy8g
TUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51
bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50
ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAg
ICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lv
biB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVp
bmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxs
YmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2Jq
ZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8g
dmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAg
IC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVu
IHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBP
dGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVs
ZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29u
ZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRp
b24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlw
ZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwot
ICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVs
bD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50
b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0v
LyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3Mg
PSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpT
Qzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZl
clZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNp
bmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46
OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJU
eXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3Qp
KQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICBy
ZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdl
dFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYg
cCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBn
ZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRl
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAg
IHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0
aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1
cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9V
SW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAg
c3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZh
bHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExv
bmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4g
dmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
LQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAg
c3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91
YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVt
YmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJl
cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2Fk
IGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGlt
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91
YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9C
eXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRv
VVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVj
dCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtl
IHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
PjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBq
c09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29u
dmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJp
YyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJ
RExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQg
Zm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3Bl
LCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBH
ZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlm
ICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpK
U0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFh
cnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9i
c2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1No
YXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3Vv
dXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlND
OjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1
ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRl
ciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0Fy
cmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9i
amVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
LQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVk
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUs
IGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGlu
ZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7
Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0g
ICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVj
LCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlND
Ojpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0g
ICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNw
YWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlk
ZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElk
ZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0
cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVz
aW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAg
ICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0
LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9i
amVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJl
c3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlL
ZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBS
ZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBi
ZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9y
ID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0
b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAg
ICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2Mu
W1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlz
IHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24g
bW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExl
dCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0g
ICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRl
cjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2
YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVl
IGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAg
ICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3Vi
VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMg
YWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAg
ICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkg
b2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRv
IHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAg
IHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAg
YXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAg
ICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAg
ICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1
ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdl
IG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEg
SlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0
b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAg
ICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwg
ZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5r
ZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRy
dWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIg
PSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmds
b2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBD
b25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0g
YnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExp
c3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAg
ICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBE
ZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9u
PFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJl
ck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZy
b250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0g
ICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6
aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAg
IHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
U2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJl
ck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25h
bEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQot
ICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5
VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBG
cm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6
Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlw
ZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25h
cnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlw
ZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5
cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5
cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlw
ZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
KyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51
bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Owot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgot
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBp
ZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMg
b2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRv
IGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFz
UmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9u
YXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
ZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhh
c0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoK
LSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRo
YXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVk
ZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxp
c3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2Fu
ZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAg
ICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBX
VEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAg
ICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVu
YW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFz
czsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9X
cmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFs
dWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMg
NSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhl
bjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXND
ZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBm
b2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRo
ZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRl
cmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0
KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlz
IG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
U2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVl
bmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRv
cikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0
aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90
IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFy
cmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNG
cm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25h
cnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhh
c0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0
eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5
cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5k
IHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURM
Qm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAx
My4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9
IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5
cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJp
bmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0
eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVt
ZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8g
MTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93
IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxi
cmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlw
ZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxl
bWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJp
YW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVy
blZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0
eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJl
ZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6
dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3Qs
IEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUp
OwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/
IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2
YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAg
aWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxF
KFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRv
SlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlm
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVy
dGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAg
ICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
ICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9
IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1
Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewot
ICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5
cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAg
ICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsK
LSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAg
IH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0
YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0Fy
Z3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5k
ZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAg
dHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydElu
ZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRC
b29sZWFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0Qm9vbGVhbi5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydEJvb2xlYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJj
ZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBl
cy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBj
bGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNF
bXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZv
aWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBj
b2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4g
VCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8v
IFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVy
c2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
KCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxF
eGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFs
dWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
T3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYm
KTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlv
biBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVy
dEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgor
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
VSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJu
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2
YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxU
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51
bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
TnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJ
bnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJ
RExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwor
ICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJz
aW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBi
ZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNh
bGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25P
YmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAv
LyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisg
ICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMu
IE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBy
dWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBj
b25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0
eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExO
dWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
LnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0KK307CisK
Ky8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0g
SlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3Rl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1
c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
Pjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBl
clR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVj
dCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1
cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYg
Z2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+
JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQm
IGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3RhdGljIGlu
dDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1w
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5
dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7Cisg
ICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3Rl
dDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0
YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4g
dG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
TG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4g
eworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQor
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAg
ICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExE
b3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBu
dW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVt
YmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJs
ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3Zlcmxv
YWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFU
aW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9E
b3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVz
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVU
b0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
VG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxp
a2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUs
IGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShj
b252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1l
cmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhl
IElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9y
dCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2Nv
cGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5n
IEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Cisg
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpT
Qzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAg
aWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6
OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAo
IWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9u
T2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpj
b252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
cnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAg
ICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5n
U2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGln
dW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZh
bHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVy
dGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAg
IHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pT
QXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6
Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJh
eSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFs
T2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwg
b2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgp
OworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKwor
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCkt
PmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmlu
ZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0
ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4
VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0
dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNl
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsK
KyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2Vx
dWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAg
ICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxU
PihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBK
U0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsK
KyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1l
c3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAg
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVy
dGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwg
aWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNW
U3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEss
IFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwor
ICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAg
dXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEu
IExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAg
ICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0
LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09iamVjdCog
b2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0
eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6
OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIC8vIDUu
IFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAg
ICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBkZXNj
IGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0
b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3Jp
cHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVz
Yy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3Ig
aXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlv
biBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5l
ZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMS4g
TGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4K
KyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVy
dGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0
IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFs
dWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAg
ICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBz
dWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBp
cyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgor
ICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94
eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQg
dG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUg
Vj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlw
ZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisg
ICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAgIC8vIDEu
IExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgorICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAor
ICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6
CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAg
ICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZh
bHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMg
d2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3Qg
YSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252
ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9
IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAg
ICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0
LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWly
LmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMg
dHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1
ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24g
dHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNr
RnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVl
LmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmpl
Y3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBD
YWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAm
Z2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlw
ZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBl
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29u
ZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0
IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUg
PSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAgICB7Cisg
ICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1l
IERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5p
b248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2
YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVt
YmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4K
KyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3Rk
Ojppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAw
IHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5n
IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRp
b25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisg
ICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZh
bHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlv
bmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+Owor
CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJy
YXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwg
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlv
bmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlU
eXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5
VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51
bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRU
eXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBD
b25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBl
cyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsg
bnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47
CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFu
ZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwu
CisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVM
aXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAg
IGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVs
bFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBl
cyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQg
dG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBo
YXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwg
aGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29y
ZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVu
OgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUg
dGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJl
ZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNs
dWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBl
TGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBicmln
YW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwor
ICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlw
ZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNs
YXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0
b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRW
YWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVw
cyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0
aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVl
LmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhl
IGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Yg
dGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qu
IAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBp
dGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1
cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2Qg
aXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYg
YW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2Vx
dWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJh
dG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdCht
ZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBu
b3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYg
YW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVu
QXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhh
c0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlv
bmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwg
aGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3Jk
IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2Ug
dHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0
aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBh
bmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJ
RExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5U
eXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUg
IT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFs
dWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmlj
VHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0
cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpz
aXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5
cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1l
cmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNO
dW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAv
LyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhy
b3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5n
IFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5
cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNl
PGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25U
eXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1w
bGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZh
cmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0
dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYm
IHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5k
UmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJ
Ojp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUp
OworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlz
dCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1
ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZh
bHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJp
YWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVDo6
Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
ID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxs
KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlw
ZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVu
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRl
KHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAg
ICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQ
dHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9i
amVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFC
TEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0
VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5k
aWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252
ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAg
ICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAg
ICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcmVzdWx0
ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURM
VHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKwor
ICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4
OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKKyAgICAg
ICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGlj
QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7Cisg
ICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJ
bmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAg
ICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIg
cmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0
SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsr
aSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Cisg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRCb29sZWFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0Qm9vbGVhbi5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCb29sZWFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDM3
NCArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIK
LSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIK
LSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4g
SW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0K
LWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZv
cmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNp
b24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUg
Zm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rk
OjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9u
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewot
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZy
b20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRl
JiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
ZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQot
ewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBl
Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0g
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRp
b25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExB
bnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxl
Q29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBu
b3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBl
cmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3
aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlz
IGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJ
REwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBO
T1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBl
IFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4K
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0g
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAg
IHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVs
bD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KIHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewogICAgIHN0YXRpYyBi
b29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAg
ICAgewpAQCAtNDEwLDE0OTEgKzQ3LDQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQm9vbGVhbgogICAgIH0KIH07CiAKLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4g
ewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJh
eUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBv
cnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsK
LSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFj
ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9X
cmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJl
dHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRy
T3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4g
Y29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyBy
ZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCeXRlPiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0
Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQx
NkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1w
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
aG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAg
IHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50
MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBz
dGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0lu
dDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2
NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBw
b2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91Ymxl
IG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUg
bnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051
bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
ZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0K
LQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0
ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJ
RExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkK
LSAgICAgICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0s
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8v
IFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
b25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9u
Zy4gVG8gYWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4g
b3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtl
cyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9i
amVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4
Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhp
bmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5k
ZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50
MzIoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8
IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzRG91YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJs
ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
c2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJ
bmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAg
ICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZl
cnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAg
ICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAg
ICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhy
b3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlND
OjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlND
OjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRl
eFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
LQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0g
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAg
ICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9i
amVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAg
ICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsK
LSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRy
LCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0g
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
LSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
aWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAg
ICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBW
Pjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFu
Y2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5l
ZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAz
LiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0g
ICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQg
a2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5
TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAg
ICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yg
a2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAg
ICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4K
LSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAg
ICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3Ip
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2Mg
aXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51
bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0g
ICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2Ny
aXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8g
YW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0g
RGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0g
ICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAg
ICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2
YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVy
dGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0
cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5
cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlw
ZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJl
dHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxL
LCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9i
amVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1h
cHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFs
dWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZl
cnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBz
dGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAg
ICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBM
ZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAg
ICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5
VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBD
cmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBi
b29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAv
LyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVz
dWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERp
Y3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0g
ICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVu
dW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7
Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09i
amVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0g
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENv
bmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBl
bmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+
IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19Owot
Ci1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNv
bmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAg
ICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9u
dDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29u
ZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBj
b25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsK
LSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0
eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
TnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBO
dW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51
bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNr
IGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6
XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVz
aW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJP
ZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBj
YW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5n
IFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+Owot
Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0g
MDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFy
eVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsK
LSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwot
ICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBo
YXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBl
ID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51
bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAg
dXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5j
bHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxU
eXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2Fu
ZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0
aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8g
Tk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAot
ICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlm
IChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAg
ICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlz
IGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAg
IC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAg
ICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAg
ICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+
Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJu
VmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4o
WyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5
cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAg
ICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAg
ICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0
ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKElt
cGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAg
ICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShy
ZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYg
aXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkg
ewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlND
OjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2Vs
bC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAg
ICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0
IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVu
OgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJl
c3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1
bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVl
bmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNl
VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0
aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0
IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFy
cmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1l
dGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29u
dmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5
cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmICho
YXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
UmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBj
YWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQg
c3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVk
ZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9v
bGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
Ym9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVh
bi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8
VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsK
LSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwg
aGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVu
OgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBl
LgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8
TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBl
KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsK
LSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5
cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAg
ICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJ
RExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2lu
ZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVu
dGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2Ug
PSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJp
YW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsK
LSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9w
dGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9l
YWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6
dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
dG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6
Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0g
ICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52
YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
SlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJp
bmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRy
PFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xv
YmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBh
dXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVu
dFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5l
cjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVj
dDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2Vi
R0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9y
dCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJ
dGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0g
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGlj
Q29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBW
YXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRh
aW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAg
ICAgIHNpemVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250
YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
c2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50
Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsg
MCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVy
dGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVz
dWx0KSB9OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oCShyZXZp
c2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJ1
ZmZlclNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBm
cm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisK
K3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhy
b3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0
aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9u
YXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkg
Z2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisv
LyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0
aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pT
KEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVk
c1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0
ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJu
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJl
dHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1Zh
bHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8
SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBl
Pjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewor
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46
OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBE
ZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4g
SWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZh
bHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRv
IGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24K
KyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRo
ZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisg
ICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIu
IE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElE
TCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5u
ZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2Jq
ZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwor
ICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxh
YmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2Jh
bE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
dmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0
aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6
bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4g
eworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVh
bj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIg
c3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5
QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVy
KjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBU
eXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBl
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsK
KyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQq
PihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25z
dCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAu
Z2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29u
c3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRy
T3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
SW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9j
dGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsK
KyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNo
b3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZz
dGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9u
Zz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAg
IHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsK
KworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgor
ICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAg
ICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMy
KCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMg
aW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0
YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElL
RUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisK
KyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1l
LgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0
cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmco
JnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
T01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmlu
Zz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBK
U0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1l
c3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVj
dCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
VmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNP
YmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVz
dWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNW
YWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAv
LyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2lu
dFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVy
aWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQg
dGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0
cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRl
ciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0Fy
cmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9i
amVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
KworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkg
eworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNo
YXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5
KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJh
eUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0
IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5k
ZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ld
LmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlND
Ojpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZl
Y3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBu
dWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJy
YXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4g
SlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZp
ZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVy
PElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVy
dGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlk
ZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlw
ZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUg
PSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBh
IG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5
cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBl
RXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFz
T2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisg
ICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAg
ICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
ICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFj
aCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3du
UHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
Y3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICgh
ZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1d
IGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQg
YnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAg
ICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRv
ci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUg
a2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAg
IGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQo
c3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQo
Tywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252
ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5
cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkg
aW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAg
Ly8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBw
aW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAh
IE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJl
cGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBl
c0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAg
ICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkg
dG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAg
ICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01B
U2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBM
ZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVl
KS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7
CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4o
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRF
bnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7
CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6
OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVu
Y3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFj
ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxU
Pj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
UyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24g
dHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVu
YWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlw
ZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxz
ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9u
dDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250
PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVj
dCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlw
ZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25k
aXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRp
b25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1
c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBO
dW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmlj
VHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlw
ZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmlu
Z1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURM
U3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Cisg
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJp
bmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5n
VHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5j
ZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdh
bmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5p
b24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5j
ZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96
ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFy
cmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZG
cm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFs
dWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVu
QXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVz
aW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29y
ZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVj
b3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJl
Y29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96
ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5
cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0
aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1
bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2Ft
ZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Mi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0
eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRl
bnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQg
dGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlw
ZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlw
ZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50
cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBv
YmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhl
biByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qg
Vi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5k
IHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVy
ZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxS
ZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPElu
dGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFu
ZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAg
dXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25U
eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdU
eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAg
IHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAg
ICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlm
IChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAg
ICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUg
YnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdl
IGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNl
cXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0
IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVk
LCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9
IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
U2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9y
ID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJy
YXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0
aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAg
ICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zy
b3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRv
ciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGlj
dGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0
eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGlu
dGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2
LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhh
dCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
MTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlw
ZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdh
bmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBO
dW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBl
ID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBp
ZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmlj
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxp
c3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVz
IGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4K
KyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBS
ZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9u
PFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Cisg
ICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlm
Zl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUm
IHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwor
CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAg
ICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAg
ICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5
cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGds
b2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpz
RGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJ
RExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewor
ICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQ
dHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJp
YWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
UmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
KyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZt
KCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmpl
Y3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIp
CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAg
ICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQ
YXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2lu
ZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6
V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5
cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFv
YmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElE
TElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xB
bnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUs
IGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVz
cGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVt
ID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0
ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVt
ID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRp
b25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcg
SXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAg
ICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBS
ZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWND
b252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3Ro
ID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQor
ICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFp
bDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVz
dWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxl
bmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJ1
ZmZlclNvdXJjZS5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTg3
NSArMjYsOTcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0j
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIklETFR5cGVzLmgiCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVkZSAiSlNET01Db252ZXJ0SW50ZXJmYWNl
LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKKyNpbmNsdWRlICJKU0R5bmFtaWNE
b3duY2FzdC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0
aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworLy8gRklYTUU6IEl0
IGlzIHdyb25nIHRoYXQgd2UgdHJlYXQgYnVmZmVyIHJlbGF0ZWQgdHlwZXMgYXMgaW50ZXJmYWNl
cywgdGhleSBzaG91bGQgYmUgdGhlaXIgb3duIElETCB0eXBlLiAKIAotZW51bSBjbGFzcyBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAg
fTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKy8vIEFkZCBhZGFwdG9ycyB0byBtYWtlIEFycmF5QnVm
ZmVyIC8gQXJyYXlCdWZmZXJWaWV3IC8gdHlwZWQgYXJyYXlzIGFjdCBsaWtlIG5vcm1hbCBpbnRl
cmZhY2VzLgogCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3Bl
cmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0g
ICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4
Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNp
YWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNv
bnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4m
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQot
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252
ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1l
cmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewot
ICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChV
TkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
QW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZh
Y2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1l
bnRhdGlvbkNsYXNzPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzOwogCi0gICAg
dGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewot
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5
cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFu
ZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAg
Ly8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMg
YSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdp
dGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0
eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQg
ZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3Ig
dW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVs
bC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2Vy
PihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
VDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVl
KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjpp
c051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVs
bCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBC
b29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChi
b29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgogdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKICAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CiAgICAgdXNpbmcgVG9XcmFwcGVk
UmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwogfTsKIAotLy8gQXJyYXlCdWZmZXJWaWV3
IHN1cHBvcnQuCiB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OwogICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PjsKIH07CiAKLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgogdGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewogICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CiAgICAgdXNpbmcg
VG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPj47CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVy
blR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9i
amVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07CiAKLW5hbWVzcGFjZSBEZXRh
aWwgeworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
VWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVk
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWlu
dDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZs
b2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQorCitpbmxpbmUgUmVmUHRy
PEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJh
eT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9y
Pih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJl
ZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWRO
YXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpT
Qzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6Rmxv
YXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZs
b2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7
IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYg
cCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgp
OyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJl
ZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQoraW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpBcnJheUJ1ZmZlciYgYnVmZmVyKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hl
ZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OwogCisgICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxs
IHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgorICAgIHJldHVybiBKU0M6
OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1
ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwogfQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0
YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0
dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJ
bnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRT
aG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMg
dWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4g
dG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50
MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
c2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1
cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdM
b25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUu
YXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFs
dWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9u
Zz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQot
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3Rh
dGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVy
OwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZv
ciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91Ymxl
KCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRl
U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNW
U3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0g
ICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2
YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5
cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsK
LQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVy
blR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09i
amVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVy
dGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0
eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExG
bG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9y
IG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBk
b3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgot
ICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5l
cmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlw
ZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAg
ICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpT
T2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICgh
SlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0Fy
cmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJh
eS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2Vy
dmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
Pmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAg
IGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBl
TWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNT
aGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJ
bnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5h
c0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5
KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZl
cnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBK
U0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVj
dCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQot
ICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50
cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
cyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9
IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkp
OwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4
VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVl
KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKK2lu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmIHZpZXcpCit7Cisg
ICAgcmV0dXJuIHZpZXcud3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0KTsKIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVj
dG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3Qs
IGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJh
eSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBK
U0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRl
bnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpBcnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKKyAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAq
YnVmZmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8Sywg
Vj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxl
bWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBv
ZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9y
IE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElm
IFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAK
LSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlz
IGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAg
IG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpF
bnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlz
IGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAg
ICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAg
ICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAg
IGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBu
b3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJh
YmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAg
ICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRv
ci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJ
REwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRh
aWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAg
ICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVl
IG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8
Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZh
bHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFw
cGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1
LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRW
YWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZh
bHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJu
IHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0
UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGlu
ZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBh
aXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVk
IHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAg
aXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8v
IGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBl
c1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAg
ICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1
ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0
ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wg
Y3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQu
IEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVh
dGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQu
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlv
bmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVy
YXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAg
ICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENh
bGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0
KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlND
Ojphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
VSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewot
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5h
bWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsK
LSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExp
c3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKK2lu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCit7Cisg
ICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICByZXR1cm4g
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1l
IERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5p
b248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVt
YmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4K
LSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3Rk
Ojppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBl
TGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAw
IHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5n
IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRp
b25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0g
ICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZh
bHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlv
bmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+Owot
Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJy
YXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwg
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2Fu
ZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlv
bmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlU
eXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5
VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46
OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51
bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRU
eXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBD
b25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBl
cyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsg
bnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47
Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFu
ZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwu
Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVM
aXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAg
IGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVs
bFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBl
cyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQg
dG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBo
YXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwg
aGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29y
ZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVu
OgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUg
dGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJl
ZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNs
dWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBl
TGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmln
YW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwot
ICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlw
ZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNs
YXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0
b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRW
YWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVw
cyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0
aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVl
LmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5h
c0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhl
IGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2Yg
dGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3Qu
IAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBp
dGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1
cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2Qg
aXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYg
YW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2Vx
dWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJh
dG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdCht
ZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBu
b3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYg
YW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVu
QXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlw
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhh
c0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlv
bmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwg
aGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3Jk
IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2Ug
dHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0
aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBh
bmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJ
RExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5U
eXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUg
IT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmlj
VHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0
cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpz
aXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5
cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1l
cmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNO
dW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAv
LyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhy
b3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5n
IFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5
cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNl
PGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25U
eXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1w
bGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZh
cmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0
dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYm
IHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5k
UmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJ
Ojp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUp
OwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlz
dCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1
ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZh
bHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJp
YWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6
Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
ID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxs
KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVu
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRl
KHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAg
ICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQ
dHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9i
amVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFC
TEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0jZW5k
aWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252
ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0
ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7
Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURM
VHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQot
ICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4
OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAg
ICAgfTsKLSAgICB9OworaW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3Nz
aWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3Kj4odm0sIHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiB3cmFwcGVyLT5wb3NzaWJseVNoYXJlZEltcGwoKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoraW5saW5lIFJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQogewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENv
dW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAs
IHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFy
dEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6
VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7
IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3Vs
dCkgfTsKKyAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXco
dm0sIHZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
Q2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0Q2FsbGJhY2tzLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0Q2FsbGJhY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZm
ZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
SURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsK
K2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0
TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsK
KyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9u
IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNl
RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlv
blZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAt
PiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhV
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4
Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
T3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51
bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcq
IGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0
ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9i
amVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFs
c2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUm
JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAg
IHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkK
K3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihz
dGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZ
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7
CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9w
YWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNW
YWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFp
bCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVD
b252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0
cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxs
YWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6
VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUg
Y29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVl
IHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxs
YWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1Ry
ZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/
CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdo
ZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZp
bmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAg
ICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2lu
ZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVj
dCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAg
ICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
U3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlND
b252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFu
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9
Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBv
cnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6Okdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFw
cGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7
CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9
IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgewor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHAp
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHAp
OyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJl
ZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0K
KworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0
YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3Rl
dD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsK
KyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAg
fQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZz
dGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAg
ICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExv
bmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAg
ICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisg
ICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRk
IG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmlu
ZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVl
LmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlz
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVy
biB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlND
Ojphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBB
cnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUo
JnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUp
OworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBm
b3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQg
Zm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8v
IHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBU
aHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAg
ICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5
cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRl
cjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAg
ICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAg
ICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFz
dEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/
CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJ
bmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6
OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50
MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
aW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBk
b3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJp
Y0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7
CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpT
Qzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252
ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXkt
Pmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5s
ZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1h
c2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hh
cGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6Ompz
VW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRl
eCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJl
dHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJs
ZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikK
KyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9K
UzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6
Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFy
cmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwg
bGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVj
LCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUK
KworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlw
ZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5n
KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmll
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmco
c3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4g
c3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJl
Y29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9u
VHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBl
OworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAg
ICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBW
Pi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJu
IHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBu
b3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1
cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3du
UHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2
bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRl
cjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBM
ZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXRE
ZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXks
IGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQg
YW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmlu
ZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51
bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAg
IC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0
eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmll
ckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8v
IDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3Vi
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0
eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgor
ICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChz
dGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlw
ZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRW
YWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlz
IGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBj
YXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwg
YXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYg
bWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAg
ICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4K
KyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAg
ICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVl
KSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewor
ICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWly
ZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmll
ciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFs
dWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVz
VmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7
CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5
KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZh
bHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVh
dGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBU
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhl
YywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1
bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlv
bjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9u
VGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYg
KCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xv
YmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZh
bHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFp
bCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3Ry
dWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2lu
ZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Cisg
ICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0
eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsK
KwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9
IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlw
ZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVM
aXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAw
IHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVy
aWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25k
aXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47
CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRp
b248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3Ry
aW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlw
ZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAw
PjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAw
IHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1
ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBD
b25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAh
PSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZy
b3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAg
ICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlw
ZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rp
b25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5
PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwor
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0
aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGlj
dGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGlj
dGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlw
ZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0g
MCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29y
ZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
UmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVl
bmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUg
dHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwor
ICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGws
IGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1i
ZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4
cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5
cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFy
eVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRU
eXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVj
dCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFj
ZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSBy
ZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjph
bnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAg
ICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkg
eworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6
dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46Oldy
YXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVy
VHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRW
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUo
Y2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJu
VmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9i
amVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0g
dmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGlt
aXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAg
IC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4g
b2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUg
ZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0
dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUs
IGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwg
QEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZB
YnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRo
b2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUg
ZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJl
dHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlU
eXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0
IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlU
eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFy
eVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJl
Y29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1Jl
Y29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50
ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiBy
ZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBv
YmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46
CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6Omlz
X3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNC
b29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46
OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
TnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJp
Z2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNT
dHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFz
U3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAv
LyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAo
aGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlw
ZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAg
ICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xl
YW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9v
bGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8g
MTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAg
ICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBl
bmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9z
ZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVu
dGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5k
ZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFs
dWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZd
KGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1v
dmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAg
ICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVy
blZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8
VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFy
aWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0
dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3Rh
dGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFs
dWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpT
T04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6
OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3Rl
bmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6
OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsK
KyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBl
ID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25U
aHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJu
VHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZl
cjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisj
aWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
Y29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsK
KworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRh
aWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+
PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisg
ICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8q
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3Vs
dCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
KyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURM
VHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRl
bT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1l
bnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7
CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlw
ZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRW
YXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4
KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYg
KHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9
OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29u
dGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgg
LSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9w
dCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0Q2FsbGJhY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Q2FsbGJhY2tzLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSwxMzQzICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1
ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZy
b20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
eyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQot
c3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2Vw
dGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJv
d2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rp
b25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25h
cnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBn
ZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVy
YXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8v
IENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxp
emVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRz
U3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFs
dWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwg
dGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
ewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVl
Lmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRo
cm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9i
amVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZh
dWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFs
dWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0g
ICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6
UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERl
dGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJ
ZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFs
dWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8g
YW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgot
ICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhl
biByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAg
ICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4g
T3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURM
IG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5l
ciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0g
ICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxl
PFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVl
KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRp
YyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpu
dWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7
Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFu
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBz
dXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlC
dWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIq
OwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5
cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQo
dm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+
KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0
IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5n
ZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25z
dCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJ
bnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
T2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0
ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewot
ICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0
dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hv
cnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0
YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25n
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAg
c3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwot
Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAg
IHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIo
KTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBp
bmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJl
cik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBm
bG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQot
ICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3Vi
bGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERv
dWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUu
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygm
c3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERP
TVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVz
cGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBW
ZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09i
amVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1
bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1Zh
bHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8v
IEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50
VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJp
YyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0
aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRz
IGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVy
ID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJy
YXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9
IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2Jq
ZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwot
Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hh
cGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAo
c3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXko
b2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQg
ZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRl
eGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6
OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVj
dG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3Qs
IGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJh
eSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBK
U0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRl
bnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0
eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBl
ID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9
IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEg
bmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlw
ZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVF
cnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAg
ICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAg
ICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
JnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNo
IGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Q
cm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNj
cmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFk
aWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0g
aXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQg
dG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBi
eSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAg
ICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBr
ZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAg
YXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChz
dGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChP
LCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZl
cnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlw
ZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBp
biByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAv
LyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBp
bmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEg
T2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVw
ZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVz
S2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAg
IC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0
byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAg
ICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFT
Y3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExl
dCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUp
LgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsK
LQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBU
JiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExF
bnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KICAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQpAQCAtMTM5NSw4ICs2
Myw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjwKICAgICB9CiB9
OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CkBAIC0xNDMxLDQ3MCArOTcsNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1z
dHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
VCwgdHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4K
LXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
IH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Qs
IGJvb2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0
cnVlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+Owot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRp
b25hbEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7
Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11
c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250
PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxU
Li4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBl
TGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8x
Pj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBi
cmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAg
IHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51
bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFs
c28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBi
cmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5n
VHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
Ci0gICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3Qs
IG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0
LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdh
bmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZy
b3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
IT0gMD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0
aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlv
bmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxE
aWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29y
ZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5k
OjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMg
PSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVz
ICE9IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlw
ZUxpc3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09i
amVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7
Ci0KLSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24g
dHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxs
LCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5
cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAg
ICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAg
ICAgICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAg
ICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
ICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAg
ICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAg
ICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQu
IElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiBy
ZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4K
LSAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4g
dGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4y
KQotICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmln
YW5kOjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBl
PiByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5
cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFs
dWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5j
ZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAg
ICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAg
ICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBh
dXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAg
ICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVy
blR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsK
LQotICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAx
MS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmpl
Y3RUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAg
IGlmIChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5n
IHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJv
dmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5
cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBi
ZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9m
U2VxdWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VU
eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRl
cmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwg
dGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRo
ZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBm
cm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5
VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0
ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
NC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0
eXBlIGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBl
cyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJl
ZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
KEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYg
aXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byBib29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdh
bmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46
OnZhbHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2
YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExC
b29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFs
dWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1l
cmljIHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2Fu
ZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVt
ZXJpY1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1
ZSAhPSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJp
YyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51
bWVyaWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xl
YW4uCi0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBl
KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+Owot
ICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcg
SW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBT
ZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBX
VEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQp
Ci0gICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAg
IHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2Fu
ZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNp
bmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+
Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
VmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVj
dCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0
eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5
cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRp
YyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3Rh
dGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+
OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0g
ICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNl
LCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJu
IGxpc3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNv
bHZlciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBh
dGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVy
VHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNs
YXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3Jh
cHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQot
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1
cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVl
KSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0
eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9i
amVjdCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRh
aWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGlj
Q29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5h
bWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9w
dCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVt
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDog
VmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5
cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNp
bmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewot
ICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUu
YXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFk
aWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUg
PSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RG
TW92ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHAJKHJldmlzaW9u
IDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdo
dCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNp
bmNsdWRlICJDb21tb25WTS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywg
cyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOworfQor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAgIGlmICgh
c3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBT
dHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9C
eXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZh
bHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmlu
Z1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKK3sK
KyAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkg
c3Vycm9nYXRlcy4KKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRo
IGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAg
ICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVybiBzdHJp
bmc7CisKKyAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
ZGZuLW9idGFpbi11bmljb2RlCisgICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3
aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmlu
Z1ZpZXcgdmlldyB7IHN0cmluZyB9OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNv
ZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmlu
ZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIFN0cmlu
ZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0
cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5n
IHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3Zl
KHN0cmluZykpOworfQorCitKU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKK30KKwor
ZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7
CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8o
KSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVj
dChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRob2Qo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIENhbGxE
YXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlN
ZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJh
dG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVk
KCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Citz
dGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKK3N0YXRpYyBj
b25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CitzdGF0aWMgY29uc3QgaW50
NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEs
IGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KKwor
c3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwg
ZG91YmxlIG1heCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpu
dW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsi
LCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51
bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOworfQorCitzdGF0aWMgZG91YmxlIGVu
Zm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRv
dWJsZSBtYXhpbXVtKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwg
c3RkOjppc2luZih4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBy
YW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIHggPSB0cnVuYyh4KTsKKyAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1h
eGltdW0pIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJv
clN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KyAgICByZXR1cm4geDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW50VHlw
ZUxpbWl0cyB7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90
PiB7CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7CisgICAgc3RhdGlj
IGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJ
bnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1
ZSA9IDI1NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7
IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7CisgICAgc3RhdGlj
IGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1
Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
aG9ydCBtYXhWYWx1ZSA9IDY1NTM1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBz
dGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25l
ZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0
c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJp
dCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkgeworICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7CisgICAgICAgIGlm
IChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVl
IDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgICAgIGQgJT0gTGltaXRz
VHJhaXQ6Om51bWJlck9mVmFsdWVzOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+
IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMg
OiBkKTsKKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBM
aW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICByZXR1cm4gc3Rk
Ojppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAgIGlmIChzdGQ6Omlz
bmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVybiAwOworCisgICAg
eCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7CisgICAgeCA9IGZt
b2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1i
ZXJPZlZhbHVlcyA6IHgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6Omlz
X2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGlu
dGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJh
aXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVu
c2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc1VJbnQz
MigpKSB7CisgICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOworICAgICAgICBp
ZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIExp
bWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAw
KTsKKworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICByZXR1
cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAgIGlmIChz
dGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVz
KSk7Cit9CisKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsK
K30KKwordWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsK
K30KKworaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDhfdCB0b1VJ
bnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dl
YklETC8jZXMtYnl0ZQoraW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAordWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7
Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisK
K3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCitp
bnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDE2X3QgdG9VSW50MTZDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxs
ZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNo
b3J0CitpbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Cit1aW50MTZfdCB0b1VJbnQxNihFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVp
bnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCitpbnQz
Ml90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVy
biB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9y
Y2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOworfQorCitpbnQzMl90IHRv
SW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4o
eCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKK30KKwordWludDMyX3QgdG9VSW50MzJDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc1VJ
bnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAg
OiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2Vi
SURMLyNlcy11bnNpZ25lZC1sb25nCit1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZh
bHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhV
SW50MzIpOworfQorCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNN
YXhJbnRlZ2VyKTsKK30KKwordWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVn
ZXIpOworfQorCitpbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwor
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6
bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heElu
dGVnZXIpKTsKK30KKwordWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIp
KTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKK2lu
dDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCAr
Ly1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAg
dW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJl
dHVybiBuOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVk
LWxvbmctbG9uZwordWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisKKyAgICAv
LyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1v
ZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRvSW50ZWdl
cih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2
ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREYXRlLmNwcAkocmV2aXNpb24gMjExNTQ4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDQ2MyArMjAsMjggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RGF0ZS5o
IgogCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29tbW9uVk0uaCIKLSNp
bmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRl
ICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgotI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdC5oPgogCiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgYWRkSW1wdXJlUHJv
cGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCisvLyBGSVhNRTogVGhpcyBz
aG91bGQgZ2V0IHBhc3NlZCBhIGdsb2JhbCBvYmplY3QgcmF0aGVyIHRoYW4gZ2V0dGluZyBpdCBv
dXQgb2YgdGhlIEV4ZWNTdGF0ZS4KK0pTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRv
dWJsZSB2YWx1ZSkKIHsKLSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5
TmFtZSk7CisgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKHN0YXRlLnZtKCksIHN0YXRl
LmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7CiB9CiAKLUpT
VmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
cykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
IHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5nT3JV
bmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5n
VG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIFN0
cmluZyYmIHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRpbjEoKSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1TdHJpbmcgaWRlbnRpZmll
clRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1v
dmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBX
VEZNb3ZlKHN0cmluZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5wYWlyZWRTdXJy
b2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZvciA4LWJpdCBz
dHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCi0gICAgaWYgKHN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQg
OiBzdHJpbmcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2Rl
UG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmcoU3RyaW5nJiYg
c3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJl
IG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgaWYgKCFoYXNVbnBhaXJlZFN1cnJvZ2F0ZShz
dHJpbmcpKQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCi0gICAgLy8gU2xvdyBwYXRoOiBodHRw
Oi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQotICAgIC8vIFJl
cGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
LgotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
c3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKLSAgICBm
b3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAgaWYgKFVf
SVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxh
Y2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb2RlUG9pbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmco
KTsKLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0KLQot
U3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygm
c3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1
cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotSlNWYWx1ZSBqc0Rh
dGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIERhdGVJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0
ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Ci19Ci0KLWRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCitkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAg
cmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52
bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhzdGF0
ZS52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxE
YXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19
Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6
YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNh
bGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3Rh
dGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2ws
IEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJs
ZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1
cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQzMl90
IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIg
PSAta01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhm
ZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAw
MDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJl
c2VudGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5n
KGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKLXsKLSAgICByZXR1cm4gbWFr
ZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUp
LCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNj
cmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAi
XSIpOwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBk
b3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQotewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1h
eGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSB0cnVuYyh4KTsKLSAg
ICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4geDsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19OwotCi10ZW1wbGF0ZSA8Pgot
c3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBt
aW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAot
fTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKLSAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0
cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWlu
VmFsdWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJe
MTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4gewot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0
ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNo
b3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlw
ZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0
aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQg
cmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IGQgPSB2
YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAm
JiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZh
bHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOwotICAg
ICAgICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOwotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBM
aW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
MCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1
cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgp
OwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDog
Zmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFs
dWVzKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZh
bHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOwotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vu
c2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBv
bmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0eXBlZGVm
IEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2
YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJh
bmdlLgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90IGQgPSB2
YWx1ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExp
bWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRv
PFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkg
fHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMo
eCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwg
TGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWludDhfdCB0b0ludDhFbmZvcmNl
UmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJh
bmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90IHRvSW50OENsYW1wKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0K
LS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQotaW50OF90IHRvSW50OChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJ
bnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAot
dWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1Nt
YWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxl
clVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsK
LX0KLQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50MTYoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2
X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
OwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0
Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBr
TWF4SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVy
biB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsK
LX0KLQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUu
YXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKLX0KLQot
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCi11aW50MzJf
dCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgIHJldHVy
biB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZv
cmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRF
bmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotdWludDY0X3QgdG9V
SW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6
IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4
LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0KLQotdWludDY0X3QgdG9VSW50
NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRv
dWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0
ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91
YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi0vLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0X3QgdG9VSW50NjQo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8g
MDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoJnN0YXRlKSkt
PmludGVybmFsTnVtYmVyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuaAkocmV2aXNpb24g
MjExNTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoy
MTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3Qu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAt
PiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsK
KworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVu
Zm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXIm
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisv
LyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVy
c2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29k
ZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRo
aXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7Cisg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRp
b24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3Vy
YXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxF
eGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24g
ZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVy
YXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
LCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUp
Cit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4o
c3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUu
cmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6
SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVy
PElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5
cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
KyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsK
KyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElE
TEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxh
YmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlz
IG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcg
cGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRl
IHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQg
aXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhl
IElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8v
IE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBp
ZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5
cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBU
LgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxF
eGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAg
dXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
SlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExO
dWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxw
dHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGlj
IGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNC
b29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZm
ZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8g
QXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVy
blR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBz
dXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRl
cmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46
OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAg
ICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisK
K25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdl
dFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHAp
IHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVz
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBp
bnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsK
KyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0
b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Cisg
ICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25n
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRv
SW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25n
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50
NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRp
bmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRv
dWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQor
CisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
bnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExG
bG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUu
dG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91
YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmlu
aXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAg
IHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0
cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChj
b25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxB
c0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25m
aWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0
eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5h
bWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmpl
Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAg
ICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0m
IHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElE
TExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRk
IGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8g
dGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFz
T2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwg
b2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJh
eShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJy
YXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVD
YXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdo
dCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmlu
ZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYg
KGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91
c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1
ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihk
b3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGly
ZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsK
KyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWND
b252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAg
ICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAg
ICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90
b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVy
aWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSBy
ZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRv
IHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAm
IEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRl
eFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVk
KCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0
Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERv
dWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNl
cXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2Vx
dWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAg
ICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsK
KyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9i
YWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96
ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwg
aW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3Vt
ZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50
KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVs
bHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENv
bnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsK
KworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5n
PiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlk
ZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Cisg
ICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBz
dHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJl
Y29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8
SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUg
Szo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGlu
c3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRl
ZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAg
Ly8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4g
TGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9w
ZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsK
KyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlz
LCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5
IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7
CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtl
eSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAg
ICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURl
c2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlw
dG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBk
ZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9y
IGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVs
dAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFk
ZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUo
KSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVk
IHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtl
eSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsK
KworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAg
ICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJ
REwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENv
bnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNl
dCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlz
IGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5
LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXks
IHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2
LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0
ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRl
KCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFj
aCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtl
eVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBj
b252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRo
aXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAg
ICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8g
Mi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUu
CisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJl
ICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAg
ICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAg
ICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJu
IHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlv
bmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxU
Pj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRy
PFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6
YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAg
eworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVj
dCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwg
dHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0
cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3Ry
dWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQor
fTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9v
bCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+
CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFs
RnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAg
ICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5n
IENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlz
dCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+
PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0
ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdh
bmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVy
T2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBj
aGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdh
bmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAg
ICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVt
YmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5k
OjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJl
ck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1
c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51
bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6
XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25h
bEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAw
PjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25h
cnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5
VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVz
ICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rp
b25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0g
MDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlz
dCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0
VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
KyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKwor
ICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBl
IGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhl
biByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNO
dWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJy
aWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMg
YmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAg
IC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAg
ICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAg
ICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAg
ICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAg
ICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYg
ViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVy
biB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAg
ICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUg
SURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAv
LyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisg
ICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6
Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJl
dHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxp
c3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRl
Y2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1l
bnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAg
ICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAg
ICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8g
Y2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlw
ZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1v
dmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJ
ZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5
cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAg
IEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYg
KGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNl
CisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQg
dGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwg
dGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRo
ZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBz
ZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1
ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRv
ck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVu
OgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJl
c3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1
bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3pl
biBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJy
YXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0
b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
IGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVz
IGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUg
YW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGlu
Y2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBh
IEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJv
b2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6
YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFs
dWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVl
LmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xl
YW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwg
dGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMg
dHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpz
aXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmlj
VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9
IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJp
YyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9v
bGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4K
KyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAg
dXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBs
ZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVl
bmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6
dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAg
ICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3Rk
OjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpm
b3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJ
ID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5
cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1
ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBX
VEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFs
dWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9E
YXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09O
U3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJl
ZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxp
emVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwg
Jmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAg
ICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1
cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlz
dGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVy
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5T
UmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBl
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1
cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJ
RExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsK
KworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJp
YWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5h
bWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBD
b250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAg
ICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExU
eXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1
bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVy
biB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERl
dGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVu
Y2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3Zl
KHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuaAkocmV2aXNpb24gMjExNTQ4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSwxNjczICsyNSwxOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJz
aW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
fTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9y
KCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYs
IEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERp
Y3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXpl
ZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewot
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19
Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lv
bi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
IG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZ
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4g
OiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6
OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5n
ZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElE
TFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAv
LyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJ
REwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWdu
ZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5j
dGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxs
XSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVs
bC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAg
Ly8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0
aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2Us
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRo
ZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURM
TnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAg
IHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
c3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29s
ZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4o
JnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
b29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1
ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlC
dWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsK
LSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0K
LS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJl
ZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVy
ZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJD
bGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2Jq
ZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVm
KGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJl
Zihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9y
dD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
U2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50
MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7
Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQz
MigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
ewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0
YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVt
YmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0g
ICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAg
IH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAg
ICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5p
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRp
YVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7
Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
YmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkg
fTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwg
WyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFs
dWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGlu
Z1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUg
bnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUg
YXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29u
dmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQot
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjpp
c0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xv
YmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsK
LQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNo
YXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMy
KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91
YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVj
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFz
QXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5p
c0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUg
cmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5
LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxP
YmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJl
dHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0
ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBL
ZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVl
VHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4g
SWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBh
IFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpT
Qzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAg
ICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4K
LSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZv
ciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tH
ZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAg
aWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJh
YmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFu
ZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQot
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNj
cmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtl
eSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAg
ICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29u
dmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/
IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1
dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBh
IGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAg
ICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0Lgot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBh
IG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8g
Mi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4g
TGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAg
ICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhl
IGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4K
LQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFu
IEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8v
IDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVz
VmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1Zh
bHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFy
eTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9u
YXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29u
dmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsK
LSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVj
dCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBV
bmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJv
b2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQs
IGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6
ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAg
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2lu
ZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+Owot
ICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVz
aW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1i
ZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51
bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVy
aWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcg
U3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9v
ZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxT
dHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNl
cXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNl
cXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJv
emVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBG
cm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJh
eVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmln
YW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25k
aXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0g
ICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
UmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29y
ZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJl
ck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVj
b3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEu
IElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjpp
c19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVs
bFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVu
aW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1m
bGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29y
ZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBs
ZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVj
dCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAg
ICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6
OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZt
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgot
Ci0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAg
ICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkg
ewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcg
Y29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRo
YXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAx
LiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCku
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRl
ZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VU
eXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3pl
biBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExl
dCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5l
ZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0
ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJh
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIu
NikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xl
YW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwg
YnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBp
cyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJp
Y1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAg
ICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051
bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdU
eXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURM
VW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlz
dDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpw
dHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVl
PjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9u
VHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4
KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwot
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0g
ICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0g
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEYXRlIHR5cGUKK0pTQzo6SlNWYWx1ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUmLCBk
b3VibGUgdmFsdWUpOworZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsgLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRl
LgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETERhdGU+IHsKICAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWVU
b0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZShzdGF0ZSwg
dmFsdWUpOwogICAgIH0KIH07CiAKQEAgLTE2OTksMjAyICs0NCwxMSBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwogCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHRha2luZyBhIEpT
RE9NR2xvYmFsT2JqZWN0IGFuZCBwYXNzaW5nIGl0IHRvIGpzRGF0ZS4KICAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCiAg
ICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFs
dWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpT
T04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0
ZSwgdmFsdWUpOworICAgICAgICByZXR1cm4ganNEYXRlKHN0YXRlLCB2YWx1ZSk7CiAgICAgfQog
fTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+
IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
UmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRl
c2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlz
T2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3Rl
bmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0g
ICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRo
TlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAg
dXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBw
ZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJL
ZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdl
YkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1u
YW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcg
SXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcg
SXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVy
PElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVz
aW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07
Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1
Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlh
ZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxl
bmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERpY3Rpb25hcnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRE
aWN0aW9uYXJ5LmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0RGljdGlvbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkw
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNl
LmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVz
LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNs
YXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9p
ZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24p
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
IGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJz
aW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMo
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1
ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJv
d1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYp
OworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9u
IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0
RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Citz
dHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhV
JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5o
YXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJv
d1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9Owor
ICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29u
c3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lv
blR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExO
dWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETElu
dGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElE
TEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAg
ICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Cisg
ICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNp
b24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJl
aW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2Fs
bGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9i
amVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAgIC8v
IHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAg
ICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhl
biByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4g
T3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1
bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVy
PFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsK
KyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51
bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUu
dG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKwor
Ly8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBK
U0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmll
dzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmll
dz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVy
blR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVz
aW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+
OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVy
VHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0
KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVy
biBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBn
ZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4m
IHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYg
Z2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50
OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0
ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAg
ICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgc3Rh
dGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRv
VUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0KKworICAg
IHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9u
Zz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExM
b25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9u
Z0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7
CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisg
ICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAg
IHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERv
dWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51
bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRo
cm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1i
ZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9h
ZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRp
bWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0Rv
dWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRv
Qnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVU
b1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmpl
Y3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlr
ZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBS
ZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwg
anNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNv
bnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVy
aWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUg
SURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0
IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29w
ZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcg
R2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVy
aWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6
SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICgh
YXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25P
YnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFy
cmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAg
ICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdT
aGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1
b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFs
dWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9
PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0
ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAg
dGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9i
amVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNB
cnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpj
b252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5
ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxP
YmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7
CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1
bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisg
ICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+
Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFs
dWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRl
LCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBp
bmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3Qg
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgewor
ICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhl
YywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVj
dEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAg
IHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+
KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpT
Qzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwor
ICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVz
cGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAg
c3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVu
dGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBp
ZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlk
ZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZT
dHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8Sywg
Vj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Cisg
ICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1
c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4g
TGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAg
ICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQu
CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVj
dCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSBy
ZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5
S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6
UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVy
dHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4g
UmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAg
ICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2Mg
YmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0
eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRv
ciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlw
dG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNj
LltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBp
cyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9u
IG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVk
KCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBM
ZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgor
ICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0
ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQg
dmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0g
b2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1
ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAg
ICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1
YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlz
IGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisg
ICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5
IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0
byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBW
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBl
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAg
ICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4g
TGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAg
IGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoK
KyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAg
ICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFs
dWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3
ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBh
IEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZl
cnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0g
dG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAg
ICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQs
IGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIu
a2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0
cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVy
dERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252
ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVl
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tG
dW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUu
aXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVj
dCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENh
bGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxs
YmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25U
aHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZn
bG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnRO
ZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBl
bmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
UmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25k
aXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3Qg
Q29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9
IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAgIHsKKyAg
ICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
TGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUg
RGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlv
bjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0Owor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZh
bHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+Lgor
ICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6
OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVM
aXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAg
fHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlv
bmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAg
ICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFs
dWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisK
KyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJh
eVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcg
RnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5k
OjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5
cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlU
eXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6
dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVt
YmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5
cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBu
dW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsK
KworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5k
IFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4K
KyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxp
c3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAg
aWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxs
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVz
IG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0
byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVs
bCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhh
c1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlv
bmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBo
YXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMg
YSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3Jk
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46
CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0
aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVm
ZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1
ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNl
IHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVM
aXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAg
c3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdh
bmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
V1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Cisg
ICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBl
bmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0g
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xh
c3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRv
V3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZh
bHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBz
IDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRo
ZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUu
aXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFz
Q2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUg
Zm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4g
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0
ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVw
dChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBp
cyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBh
bmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1
ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0
b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1l
dGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5v
dCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBh
bmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5B
cnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFz
RnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVz
IGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9u
YXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBo
YXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQg
dHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0
eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFu
ZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAg
ICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElE
TEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9vbGVhblR5
cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
MTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAh
PSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNU
eXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3Ry
aW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
dHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNp
emU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3RyaW5nVHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElm
IHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVy
aWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051
bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8v
IDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3LiBUaHJv
dyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcg
VHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlw
ZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8
YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5
cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBs
ZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4ID0gdmFy
aWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYg
dHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRS
ZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6
OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0
LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3Vi
bGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFs
dWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpj
cmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUg
PyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwo
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5l
cjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUo
dmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAg
IGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0
cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2Jq
ZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBE
ZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lmIEVOQUJM
RShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisKKyNlbmRp
ZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZl
cnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAg
ICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4geworICAg
ICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiByZXN1bHQg
PSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3Ry
dWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsK
KyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExU
eXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisg
ICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7
CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOworICAgICAg
ICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERl
dGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNB
cmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAg
ICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChzdGFydElu
ZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAg
IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciBy
ZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJ
bmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytp
KSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAg
IGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKwor
ICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dERpY3Rpb25hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnREaWN0aW9uYXJ5LmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERpY3Rpb25hcnkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsMTMwMCArMjUsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJT
b3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURM
VHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpT
VmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9y
bWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVj
dCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25U
aHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5
IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9u
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBj
b25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2Vw
dGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsK
LSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVj
dCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252
ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBi
eSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6
RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRl
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNF
eGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAg
IH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFu
eSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwot
ICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChj
b25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxs
YWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7
Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVy
blR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZl
cnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6
Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlw
ZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlz
IGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0
dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAv
LyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0
dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8K
LSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVy
d2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxs
YWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURM
IHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
ewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVj
dDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkp
OwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3Rk
OjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0
cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAg
IHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9y
dC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFy
cmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07
Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBh
cnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+
IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9
Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsg
fQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBw
KSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7
IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVm
PFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYo
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdl
ciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBz
dGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJl
dHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0
b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9J
bnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRT
aG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExM
b25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9u
Zz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRp
YyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0
aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0K
LSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExG
bG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5l
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
ICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAg
fQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBp
bmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51
bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1i
ZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4g
ewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJp
bmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0g
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewot
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBp
ZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXRO
dWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0
cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBP
YmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9y
PHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3Qq
IGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAg
ICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShK
U0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkg
ewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhN
RTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVz
IGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlw
ZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAot
ICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1
bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0g
SlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9i
amVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6
OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgp
LT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAg
ICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlS
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0
aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlu
ZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6
aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZl
cnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3Qo
dmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3Qp
OwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVj
dCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJh
dG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVy
blR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2Vw
dGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdU
eXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25n
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExM
b25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikK
LSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRy
LCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0
YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0
b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERP
TVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewot
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElE
TFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZp
ZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5h
bWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURM
UmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5
cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBl
bmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBl
bXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykg
aXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3Iu
Ci0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0
KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAg
IC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0
ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVt
ZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDog
a2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVy
dHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRv
cjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0
RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8g
Mi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRy
dWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNo
ZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhl
IGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAg
IGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVt
ZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNv
bnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8g
dHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUs
IGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5
KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBr
ZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0K
LSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQg
dG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFs
dWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVz
dWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90
ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0
eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5
cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVj
dENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwg
Zm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBi
ZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBO
b3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUK
LSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAg
ICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0
IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3Jl
YXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAg
ICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAg
ICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMu
IFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKKy8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9u
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlw
ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CiAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IFQ7CkBAIC0xMzM5LDU2MiArNTMsNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogRW51
bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsK
LSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51
bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2Jq
ZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAg
ICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUo
SlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxU
Pj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29u
c3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4g
ewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
UmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29u
ZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAg
IHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250
PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25k
aXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNv
bmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewot
ICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5
cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpz
aXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZO
dW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51
bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVt
ZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sg
Zm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNp
bmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9m
U3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNl
cXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcg
U2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0K
LSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlw
ZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9y
IDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAw
OwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5
VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5k
OjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0g
ICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhh
c1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUg
PSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1
c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJ
bnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNs
dWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0
dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5
cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5k
OjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRo
ZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBO
T1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0g
ICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYg
KGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAg
ICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAg
ICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAg
ICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMg
YSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAg
ICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAg
ICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+
Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5W
YWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0Pihb
Jl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlw
ZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRp
b25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAg
ICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAg
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3Rl
ZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1w
bGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAg
ICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
dHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBp
cyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7
Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6
OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxs
LT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAg
ICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQg
dGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVz
dWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVu
Y2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VU
eXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRo
b2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQg
b2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJy
YXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0
aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBS
ZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNh
bGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBz
dGVwIDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRl
cyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0
byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29s
ZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBi
b29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFu
LgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxU
eXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwot
ICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jv
b2xlYW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBo
YXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46
Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUu
Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxO
dW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUp
IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQu
IElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
U3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwot
ICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlw
ZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4s
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAg
ICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElE
TEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
aW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5n
IFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9
IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlh
bnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewot
ICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0
aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5
cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0
eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0
b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpn
ZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAg
ICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZh
bHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgm
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
ZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExK
U09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmlu
Z2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9i
YWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50
TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1
dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50
V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVy
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBl
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29s
dmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwg
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
SURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJH
TEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0
IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVy
QmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJp
YWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0
ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlv
bmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWND
b252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZh
cmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFp
bmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAg
ICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRh
aW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46
OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBz
aXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRD
b3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAw
LCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0
ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3Rh
cnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6
OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4g
eyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1
bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0RW51bWVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oCShyZXZpc2lv
biAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5o
OjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEVudW1l
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJC
aW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
T05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20g
SlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3Ry
dWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlv
blRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25h
cnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnko
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENv
bnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlND
OjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3Rh
dGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewor
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJu
IHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
QW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0
Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7
CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51
bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0
dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29u
dmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBU
eXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUg
aXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4g
YXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAg
IC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiBy
ZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAv
LworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3Ro
ZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51
bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJ
REwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qp
OworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAg
fQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRo
cm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+
PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8
VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2Jq
ZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVl
KSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBz
dGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxs
cHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Cisg
ICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBw
b3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6
QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZm
ZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwor
fTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3Jh
cHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVk
IGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6
OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4g
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAg
IH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHAp
OyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQm
IHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQo
KTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBS
ZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRl
Z2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0
ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAg
IHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElE
TExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgor
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3Rh
dGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisg
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0
YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsK
KworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgor
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxp
bmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9h
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGlj
IGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAg
IHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUg
bnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51
bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5n
PiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3Rh
dGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0
cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsK
KyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
aWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0
TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0
ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7
CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVh
dE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFj
ZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0
b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVj
dCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owor
ICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRd
KEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVl
KSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlw
ZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0
eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0
CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFy
Z3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0g
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93
U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXko
b2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpT
Qzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0
KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisg
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRy
eVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElz
IHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
YXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+
Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
aW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJm
bHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3Rk
Ojppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJh
eS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5k
ZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAo
IXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVj
dCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2Jq
ZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRl
cmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0
dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhj
ZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGlu
Z1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6Ompz
VW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExv
bmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERl
dGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rv
cjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2Vk
QXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9y
KQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVs
ZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxw
dHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBE
ZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZl
Y3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgm
ZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6
Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7
CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRp
Zmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJ
RExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0g
dHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5
cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3
IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShP
KSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAK
KyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJv
ci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAg
ICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0
YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVs
ZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9w
ZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRH
ZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAv
LyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMg
dHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
Y2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0
aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAg
ICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVu
dW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkg
Y29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0
byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0
ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBr
ZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRl
ZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRW
YWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiBy
ZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBO
b3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcg
KHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsg
dHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2Jq
ZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0
LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5
IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8v
IE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBi
ZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAg
ICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3Jp
cHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBj
cmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgor
ICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKwor
ICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
My4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBk
aWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVt
ZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1l
cmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3Jl
YXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlv
bjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0
ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0lu
dGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxl
ZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFt
ZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7
CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExp
c3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlz
dD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0g
dm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlv
bj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFs
RnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
aW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5n
IFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVy
aWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlz
dCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJp
bmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZT
dHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5
cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlv
bi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBl
TGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6
XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMg
PSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlw
ZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFy
cmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8
YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsK
KyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJh
eSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBD
b25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXpl
PERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZE
aWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlv
bmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZy
b250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcg
UmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3Jk
VHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNv
cmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMp
ID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1
bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElE
TE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBM
ZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUu
CisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVk
LgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVu
OgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgor
ICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgor
ICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0
aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVj
dCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgor
ICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3Rl
cCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNl
PGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVy
blR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJm
YWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1
cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVm
ZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2lu
ZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7
CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAg
ICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
UmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAg
IC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhh
c09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAg
ICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBt
YWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2
ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVu
Y2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0
aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1
ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBo
YXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0
eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2Qg
YmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJu
IHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVu
QXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0g
aGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9u
YXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVz
IGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJm
YWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElm
IHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4g
SWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0g
YnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6
XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJl
ciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVt
ZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBi
cmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmICho
YXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46
OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBu
dW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1
ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
Ym9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVy
blR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4u
Lj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1
c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVz
aW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8
MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFy
aWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBi
cmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAg
ICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0
eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4g
cmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBE
YXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRl
KCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpT
T04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAg
c3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxU
PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6
ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQ
dHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAg
IHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7
CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwg
ZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICBy
ZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhO
U1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2
ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFw
cGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6
dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVj
dCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYo
dmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURC
S2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNl
IERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisg
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0
eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpu
dWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVt
ID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAg
ICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3Vs
dCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZl
cnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBz
dGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAg
ICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpW
YXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3Ro
LCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RW51bWVyYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFbnVtZXJh
dGlvbi5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMzIyICsyNSwx
OSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1l
bnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBj
bGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5n
ZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlv
bmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBs
ZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsK
LQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRy
dWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwg
ZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50
YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25n
PEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFu
eT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJl
dHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJz
aW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmpl
Y3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVk
Ci0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5
cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3Rh
dGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxs
YWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhh
bmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFs
dWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmpl
Y3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0
ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xl
YW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZh
bHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZm
ZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0Lgot
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBl
ZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5U
eXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVm
KGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9y
UmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJu
IHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0
ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5
dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hv
cnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0
aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51
bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGlj
IHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
c2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUlu
dDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQg
dHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1i
ZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
Ci0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJl
ciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjpp
c2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIo
JnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0
cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJs
ZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVt
YmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91
YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBp
bmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBk
b3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91
YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0
aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
JiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFj
aEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3Rh
dGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVj
aWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkg
aW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRv
IGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJs
b2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4g
RXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZh
bHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
LQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3Qp
OwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRv
clByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRp
b24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlw
ZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRl
eFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3Bl
LCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgo
JnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAg
dXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBl
PjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAg
IGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93Pwot
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5k
ZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpD
b250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFs
dWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5n
ZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25n
Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3Vi
bGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlz
dC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAg
cmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3Qs
IGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAg
IGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAg
ICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmds
b2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9y
RnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
UmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRl
bXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50
aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJU
b0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0g
ICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0K
LSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46Oklt
cGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVt
ZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9m
IHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3Ig
TnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYg
VHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAot
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMg
YmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAg
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVu
dW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMg
aW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAg
ICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAg
ICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAg
Ym9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
JnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5v
dCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFi
bGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAg
ICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9y
LnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElE
TCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFp
bDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAg
ICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAg
ICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
IC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUg
b2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxW
Pjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFs
dWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBw
ZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUu
IE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZh
bHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFs
dWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4g
cmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQ
cm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5n
IChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFp
ciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQg
dG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBp
cyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8g
YW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVz
VmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAg
ICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVl
UGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRl
RGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBj
cmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4g
QXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0
ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisvLyBT
cGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNp
b24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
VCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygp
OwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVy
YXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBUKTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKICAgICBzdGF0aWMgVCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQpAQCAtMTM1OSw1NDIg
KzU2LDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPAogICAgIH0K
IH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsK
LSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVj
dCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBV
bmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJv
b2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQs
IGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6
ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAg
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2lu
ZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+Owot
ICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVz
aW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1i
ZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51
bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVy
aWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcg
U3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9v
ZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxT
dHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNl
cXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNl
cXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJv
emVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBG
cm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJh
eVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmln
YW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25k
aXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0g
ICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
UmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29y
ZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJl
ck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVj
b3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEu
IElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjpp
c19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVs
bFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVu
aW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1m
bGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29y
ZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBs
ZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVj
dCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAg
ICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6
OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZt
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgot
Ci0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAg
ICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkg
ewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcg
Y29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRo
YXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAx
LiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCku
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRl
ZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VU
eXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3pl
biBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExl
dCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5l
ZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0
ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJh
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIu
NikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xl
YW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwg
YnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBp
cyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJp
Y1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAg
ICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051
bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdU
eXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURM
VW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlz
dDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpw
dHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVl
PjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9u
VHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4
KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwot
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0g
ICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0g
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5k
ZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhp
c09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0
ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAot
ICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURC
S2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBX
ZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQot
bmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1
c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVt
OwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3Ry
dWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAg
fTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBs
ZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5n
dGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUg
RGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFdmVudExpc3Rl
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1
ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9
OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJl
YXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIg
eworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRp
b24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFy
c2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9u
IC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmlu
ZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0
YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBm
YWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
VSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+
KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkK
K3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIg
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpK
U1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtu
b3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1w
bGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsK
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51
bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+
OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRo
ZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBk
dWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51
bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBb
VHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUg
VD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNl
d2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRl
ZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgor
ICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVz
aW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAg
fQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Y29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlv
blR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxl
KHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xl
YW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZh
dWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAg
IH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3Vw
cG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6
OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlw
ZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQor
ICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCog
cCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4o
cCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3Qg
UmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsg
fQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAg
c3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50
OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9j
dGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
eworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUg
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91Ymxl
IG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIo
JnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
TG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9h
dDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3Vi
bGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3Ry
aW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFs
dWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1
cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUu
aXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBK
U0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJs
ZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
V1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9u
IGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRl
ZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAg
Ly8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUs
IFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAg
ICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVy
dGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAg
ICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAg
ICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAg
ICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xG
YXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29u
dmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJv
dz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6
OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6
OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRl
eFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJ
bnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRv
IGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRW
YWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkp
OworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5l
cmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpT
T2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICgh
SlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0Fy
cmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJh
eS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2Vy
dmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
Pmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBl
TWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNT
aGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6
anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdElu
ZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5U
eXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0
YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5j
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlND
Ojpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96
ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERl
dGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byog
YXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0
LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4
ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlw
ZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdU
eXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJp
bmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlm
aWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmlu
ZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
UmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRp
b25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEss
IFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1
cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlz
IG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpK
U09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tP
d25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMo
JnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25N
b2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9y
ZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEu
IExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdl
dERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtl
eSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5l
ZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVm
aW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBl
bnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5p
c1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9m
IHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlm
aWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAg
Ly8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBz
dWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0
IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYu
CisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0
KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0
eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBl
ZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8g
aXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlz
IGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNl
LCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBl
JiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAg
ICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUp
LgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Cisg
ICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFs
dWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7
CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01B
U2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1
aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlm
aWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2
YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8g
ZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVl
KTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVy
dHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5
VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNy
ZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRl
ZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25h
cnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25h
cnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51
bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhl
eGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sg
ZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBp
ZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZn
bG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0
cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3Qo
dmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVy
dGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0
IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBz
dHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Cisg
ICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVz
aW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4K
KyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9
IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBl
OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQu
Li4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBl
ID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpU
eXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlw
ZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09
IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVt
ZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAw
PjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJh
dGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxT
dHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdU
eXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9y
IDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUg
PSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9
IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09
IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNl
cXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZG
cm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwor
ICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlU
eXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGlj
dGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25h
cnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7
CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0Rp
Y3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBE
aWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNE
aWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRU
eXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9
PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVj
b3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29y
ZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2Vx
dWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFy
eVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNl
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdh
bmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJs
ZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6
YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7
CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVs
bCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1l
bWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMg
ZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJ
ZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5
VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rp
b25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9u
YXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVz
IGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29y
ZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUs
IGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2Jq
ZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJm
YWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhh
dCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0
eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBh
IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6
OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAg
ICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBl
KSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBl
Ojp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVu
YW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdU
eXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFw
cGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6
V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBw
ZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3Rl
ZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlw
ZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1
cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Yg
b2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwg
PSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0
aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAg
ICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBh
biBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRo
b2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0
dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJ
ZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcg
YQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlw
ZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBS
ZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlw
ZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChW
LCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5J
ZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1l
dGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlw
ZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJh
eVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAz
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRo
YXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFy
eVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9u
YXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEg
cmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFz
UmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZh
Y2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBp
bnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBW
LgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhl
bjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29u
c3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6
aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhh
c0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0
Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBi
cmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhh
c1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBo
YXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAg
IC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlm
IChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNU
eXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKwor
ICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9v
bGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNC
b29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAv
LyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewor
ICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5
cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtl
X3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVt
ZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBp
bmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNW
YWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihb
Jl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAg
ICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0
dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjph
dDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2
YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChy
ZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2
YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJp
YWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpT
Qzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlz
dGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2
ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7
CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0g
VDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkp
OworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlv
blRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1
cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29s
dmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9
OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMg
dGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8
VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisK
KyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVz
dWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJ
RExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJ
dGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1
bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50
czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0
eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVy
dFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5k
ZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBp
ZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0
IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpD
b250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0
aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkp
OworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxs
b3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsK
KyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRFdmVudExpc3RlbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTE1NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFdmVudExpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3MjkgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+Cisj
aW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFz
cyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0
eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQg
b3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Ci0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
T2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBj
b252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lv
bi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlv
bihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
IGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3Qm
LCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsK
LQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBj
b252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVu
dW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3Ry
dWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVj
dCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYm
IHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQot
ewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFz
RXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxh
YmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVs
bGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRl
cmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAg
IAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9u
IHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWlu
ZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxi
YWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmpl
Y3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2
YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAg
Ly8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4g
cmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90
aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxl
cyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBl
bmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
VDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVG
cm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0g
ICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxs
PiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRv
Qm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwotICAgIH0KLX07Ci0KLS8v
IEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlND
OjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBs
YXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVy
Vmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7
Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFw
dG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2lu
ZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6
V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5
cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkp
Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4g
Y29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0
UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBw
KSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdl
dFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBE
ZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgc3RhdGljIGludDhf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAg
c3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRv
VUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHN0YXRp
YyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJ
bnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJl
dHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0
b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFs
dWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9u
Z0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2
YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4gewot
Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAg
ICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICBz
dGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3Vi
bGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRo
cm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1i
ZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVy
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewot
ICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmxvYWQg
Zm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1l
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3Vi
bGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3RyaW5nIHR5cGVzCi0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb0J5
dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9V
U1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0
KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFycmF5LWxpa2Ug
dHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+
OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgUmV0
dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpz
T2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252
ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmlj
IHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElE
TEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCi0gICAgLy8gc3VwcG9ydCBm
b3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5
cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUs
IGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdl
bmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYg
KCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFy
cmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2Jz
ZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJh
eS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hh
cGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91
c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6
OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVl
LmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0g
SlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVl
ID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVy
ID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJy
YXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9
IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2Jq
ZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwot
Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQo
KTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwg
aSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQot
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgaW5k
ZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOwotCi0gICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsK
LQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Owot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAg
ICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMs
IGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RB
cnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7
Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7
Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihl
eGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6
OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3Bh
Y2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0
cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRp
ZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVy
PElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRl
bnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3Ry
aW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAg
IHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNp
bmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExl
dCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAg
ICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0Lgot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3Qs
IHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVz
dWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtl
eXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlBy
b3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5
TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJl
cGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAg
ICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJl
ID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlE
ZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3Ig
PSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRv
cik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
ICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5b
W0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhN
RTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMg
dGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBt
b2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgp
ICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0
IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAg
ICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVy
PEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZh
bHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9i
amVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUg
YmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAg
ICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBh
bHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAg
ICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBv
YmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8g
cmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4g
c3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAg
ewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExl
dCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBh
dXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAg
ICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0g
ICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAg
ICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVl
LgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2Ug
bmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBK
U1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0
ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRv
SlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAg
ICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBl
c0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERp
cmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtl
eSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1
ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRE
aWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVy
dERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVu
Y3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlz
RnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3Qp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxs
YmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xv
YmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3
bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5h
bWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJl
dHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBi
cmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAg
ICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExp
c3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERl
dGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248
VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVy
T2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAg
ICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjpp
c19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlz
dD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8
IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25h
bEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAg
dXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExT
ZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0g
ICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZy
b3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6
XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBl
ID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlw
ZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZh
bHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJl
ck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBl
ID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25k
aXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyAr
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVt
YmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBW
IGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0g
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlm
IChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBv
ZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8g
YmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwg
b3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNS
ZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25h
cnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBk
aWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFz
RGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEg
cmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgot
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhh
dCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRl
cyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0
byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5k
Ojpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdU
Rjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAg
ICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5h
bWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNz
OwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1
ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1
IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVu
OgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0Nl
bGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZv
bGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhl
IGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVy
YXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQo
bWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMg
bm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5k
IG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNT
ZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVu
Y2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9y
KS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRo
b2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3Qg
dW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5k
IG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJy
YXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zy
b3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFz
RGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5
cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlw
ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUg
SURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQg
c3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExC
b29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBl
KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEz
LiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0g
MDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlw
ZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmlu
ZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5
cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXpl
PFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0
eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmlj
VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1l
cmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAx
Ni4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cg
YSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5
cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6
OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJy
aWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBl
Pjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVt
ZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlh
bnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJu
VmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5
cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVm
ZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2
YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwot
ICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwg
ST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7
Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVl
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxp
emVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3Jl
YXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8g
dmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQot
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CiAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKIApAQCAtMTc2MywxMzggKzQ1LDQgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0K
LS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxU
PjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShX
RUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pT
VmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRp
b25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAg
ICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAg
ICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBD
b252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBl
Pjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAg
ICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0g
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFp
bDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1
bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBz
aXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4
ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5
cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRl
eCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlm
ICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAg
IHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW5k
ZXhlZERCLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0SW5kZXhlZERCLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0SW5kZXhlZERCLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJT
b3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURM
VHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2Vu
dW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
CisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNv
bnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51
bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dl
cj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBK
U1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVy
YXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNv
bnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVj
dD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0
ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7
CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4m
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8
SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlw
ZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29u
dmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRv
IFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJs
ZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0
Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Cisg
ICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJl
LgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVk
LCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAv
LyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0
aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwg
c3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3Rh
dGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxl
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9
OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQu
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVk
UmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Cisg
ICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFv
YmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0
cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRp
YyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4g
eworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
T2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAg
ICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQor
CisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxv
YXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7
CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAg
ICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
b3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92
ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1l
ZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
LnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0
eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlz
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVy
biB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjph
c09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJh
eS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRp
b25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0
YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3Ig
bnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9y
IHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1
cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJv
d1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1
c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+
OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAg
ICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAg
SlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAg
aWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFu
ZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Cisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRl
eGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNv
bnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5k
ZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdU
eXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3Vi
bGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0Nv
bnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVj
dCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6
aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSog
YXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmds
b2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5n
dGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7
CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZs
eSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5k
ZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgm
c3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6
U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAg
ICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxU
PihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29u
c3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJy
YXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3Ip
CisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRv
SlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5
ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlz
dCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBh
cnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4K
KyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3Rh
dGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJU
b1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29y
ZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlw
ZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4K
KyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJl
c3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJv
cGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwg
SlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAv
LyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoK
KyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQg
ZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNj
cmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRl
c2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5k
IGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQs
IG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVy
YXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRl
ZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8v
IDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBl
IEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNv
bnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIu
IExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBl
ZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAg
ICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0
ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRL
ZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1
ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEg
cHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNl
LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBw
ZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVu
YW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFw
KQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAg
ICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAg
ICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBp
biBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAg
ICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlw
dCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQs
IGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwg
bm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFs
dWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisK
KyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJl
c3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVl
UGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVk
IGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0
aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0
aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxs
YmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxU
Pj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2
YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFs
T2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVl
KSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0
IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0
cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0
eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAg
eworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBl
bmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElE
TFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxp
c3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8
IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRp
b25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248
VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5n
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0
cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsK
KworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+
Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8
IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5j
ZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25k
aXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAw
PjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3pl
bkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1
c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxp
c3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25h
cnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9u
YXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlv
bmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlv
bmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVj
b3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNl
VHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpf
MT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlw
ZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBu
dWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxU
eXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAg
ICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhh
c051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIg
dHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVj
dGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBp
cyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUg
fHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBk
aWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5
VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNS
ZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwg
dGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0
eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMg
YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMg
aW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8
VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAg
YnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewor
ICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlw
ZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9
IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5
cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBw
ZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlw
ZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2Fz
dGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
c3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVj
dCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFs
dWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXpl
IHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8v
IG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2Jq
ZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYs
IEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklm
QWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0
aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJv
bSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJu
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhh
c1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBp
dGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1
cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2Qg
aXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJv
bSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zy
b3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVy
blR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBl
LCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRp
Y3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29y
ZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJl
Y29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29y
ZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJm
YWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmpl
Y3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Cisg
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3Nh
bWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29s
ZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZh
bHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVt
ZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2Fu
ZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJp
bmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3Ry
aW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAx
NS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFz
TnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwg
aGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAg
ICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5U
eXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVh
blR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcu
IFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1
c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFt
ZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1
ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0
aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXgg
PSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+
IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1
dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVD
VkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBp
ZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZh
bHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlw
ZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFu
dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJu
VmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUs
IDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6Ompz
TnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVy
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExp
c3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNy
ZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAg
ICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
UmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlw
ZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYg
RU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKwor
I2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwg
Y29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAg
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJl
c3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlw
ZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47
CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJ
bmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Cisg
ICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5h
bWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJp
YWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQor
eworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0
YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9Owor
CisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFp
bmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBz
dGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9
OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0SW5kZXhlZERCLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0SW5kZXhlZERCLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxNzgyICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZl
clNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJ
RExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5l
cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9Owot
ZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXRO
dWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewot
ICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVy
YXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24g
Y29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VF
bnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17
Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2Vw
dGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+
IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUm
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhj
ZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVt
ZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRl
LCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2Jq
ZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxz
ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYm
IHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQot
ewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0
YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFko
dmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0
ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2
YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsK
LSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7
Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1Zh
bHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWls
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0gICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAg
ICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxh
YmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpU
eXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBj
b252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUg
dG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxh
YmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJl
YXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8K
LSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hl
cmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmlu
ZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgotICAg
IC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5n
IHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0gICAgfQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29u
ZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2Vw
dGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5
cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNT
dGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZh
bHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJvb2xlYW4g
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9y
dC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFy
cmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsK
LSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0g
V3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFko
IW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkg
eyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7
IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVm
UHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQot
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgc3Rh
dGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50
OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50OChz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0
PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0
Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewot
ICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50
MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAg
ICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0
YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9u
Z0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExG
bG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAg
ICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAg
ICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1
cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3Vi
bGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQg
b3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
TWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3RyaW5n
IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUu
aXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0
dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4g
dmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB7IHZtLCBKU0M6
OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFy
cmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgm
c3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RG
TW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNpYWxpemF0aW9uIGZv
ciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBm
b3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCi0gICAgLy8g
c3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRo
cm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAg
IHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlw
ZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVy
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAg
ICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owot
ICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8K
LSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6Oklu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6Oklu
ZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQz
MigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChp
bmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRv
dWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmlj
Q29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsK
LQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlND
Ojppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5
KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+
Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFi
bGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxl
bmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFz
azsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFw
ZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVy
Zmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNV
bmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4
KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAg
ICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBl
OworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0
YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9y
PFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRB
cmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3Ip
Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxl
bWVudCkpOwotICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0
ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERl
dGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVj
dG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3Qs
IGVsZW1lbnQpKTsKLSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZl
eGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6
b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29u
dmVydGVyOwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExE
T01TdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsK
LSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJ
RExVU1ZTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlm
aWVyKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVu
YW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElE
TFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0
eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlw
ZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcg
ZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8p
IGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAot
ICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9y
LgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVj
dCh2YWx1ZSk7Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAg
ICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBK
U0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0
cmluZ3MpOwotICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3Rh
dGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxl
bWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IGtleXMpIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3Bl
cnR5XV0oa2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0
b3I7Ci0gICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blBy
b3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdl
dERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8v
IDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0
cnVlOgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBj
aGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRo
ZSBkZWZhdWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAg
ICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51
bWVyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBj
b252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRv
IHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRl
LCBrZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtl
eSkuCi0gICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwg
a2V5KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
Ci0gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVk
IHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZh
bHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJl
c3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5v
dGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAo
dHlwZWRLZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0
eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIDYuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVy
PElETFJlY29yZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmpl
Y3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0
cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQs
IGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkg
YmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8g
Tm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJl
Ci0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAg
ICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlw
dCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNy
ZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0g
ICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0g
ICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAz
LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRp
Y3Rpb25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVy
YXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRp
YyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVh
dGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9u
PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChj
b25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRy
T3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50
ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVk
Pgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsK
LSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlz
dCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0
PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29u
ZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2
b2lkOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9u
PgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxG
cm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5p
b248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcg
VHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJp
Y1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5k
OjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0g
MSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
LSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0
LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmlu
ZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0
cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0
YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlw
ZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVM
aXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBl
TGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJy
YXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxi
cmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwot
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5
IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBS
ZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJp
Z2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0g
MSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRU
eXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29y
ZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJy
YXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykg
PiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVu
aW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZp
bmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURM
TnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExl
dCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4K
LSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQu
Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46
Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0g
ICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0g
ICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4g
SWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0
IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0
dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0g
ICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVw
IDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8
YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZh
Y2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVy
blZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZl
cmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5n
IEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
LSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsK
LSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAg
ICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBS
ZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAg
Ly8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFz
T2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAg
ICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1h
a2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZl
IHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5j
ZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRo
b2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0
dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVl
bmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhh
c0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5
cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBi
ZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
ICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAg
ICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZG
cm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5B
cnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBo
YXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25h
cnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZh
Y2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYg
dHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMg
YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJ
ZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBi
cmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpf
MT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
SURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVy
IHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1l
cmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
bnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJy
aWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhh
c051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6
dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51
bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBi
b29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJu
VHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4u
PjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNp
bmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDww
PiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJp
YW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJy
aWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAg
IHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5
cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERh
dGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0
Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNP
TiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXpl
KHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0
cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAg
ewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsK
LQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBm
YWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJl
dHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5T
UmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZl
cjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3Jh
cHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBw
ZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0
b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0
KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OworI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIK
IAotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwpAQCAtMTgxMyw4OCArNDQsNiBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+CiAgICAgfQogfTsKIAot
I2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkgdHlw
ZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0KLX07
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRh
aWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGlj
Q29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5h
bWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9w
dCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVt
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDog
VmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5
cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNp
bmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewot
ICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUu
YXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICBy
ZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFk
aWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUg
PSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0
ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RG
TW92ZShyZXN1bHQpIH07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW50ZXJmYWNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW50ZXJmYWNlLmgJKHJl
dmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
SW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZy
b20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
eyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKwor
c3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2Vw
dGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJv
d2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rp
b25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25h
cnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBn
ZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVy
YXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8v
IENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
VSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxp
emVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRz
U3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFs
dWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwg
dGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
eworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0
dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVl
Lmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRo
cm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9i
amVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZh
dWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFs
dWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Cisg
ICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6
UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERl
dGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJ
ZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFs
dWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8g
YW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgor
ICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhl
biByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAg
ICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4g
T3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURM
IG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5l
ciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cisg
ICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxl
PFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVl
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRp
YyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpu
dWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7
CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFu
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBz
dXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlC
dWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIq
OworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5
cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxU
Pj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQo
dm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0Owor
ICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+
KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0
IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5n
ZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25z
dCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJ
bnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
T2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0
ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewor
ICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hv
cnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0
YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAg
c3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwor
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAg
IHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIo
KTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBp
bmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJl
cik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBm
bG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKwor
ICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3Vi
bGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERv
dWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUu
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7Cisg
ICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygm
c3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERP
TVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVz
cGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBW
ZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09i
amVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1
bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1Zh
bHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50
VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJp
YyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0
aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRz
IGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVy
ID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJy
YXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9
IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2Jq
ZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwor
CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBl
ID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hh
cGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAo
c3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXko
b2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQg
ZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRl
eGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6
OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewor
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVj
dG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3Qs
IGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6
IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJh
eSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBK
U0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRl
bnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0
eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBl
ID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9
IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEg
bmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlw
ZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVF
cnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAg
ICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAg
ICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2Rl
OjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwg
JnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNo
IGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Q
cm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNj
cmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFk
aWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0g
aXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQg
dG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBi
eSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAg
ICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9y
LmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBr
ZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAg
YXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChz
dGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChP
LCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3Rh
dGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZl
cnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlw
ZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBp
biByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAv
LyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBp
bmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEg
T2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVw
ZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVz
S2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAg
IC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0
byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAg
ICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFT
Y3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExl
dCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUp
LgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsK
KworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBU
JiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExF
bnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsK
KyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6
Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5j
dGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFj
a0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENh
bGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5h
YmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUg
UmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBl
bmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNl
PiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250
PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8
TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0
IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBl
ID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRp
dGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4g
VD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVz
aW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51
bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJp
Z2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBl
TGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5n
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExT
dHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmlu
Z1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdU
eXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNl
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlv
bi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNl
VHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3pl
bkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJy
YXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZy
b3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1
ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5B
cnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUg
PSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJy
YXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpz
aXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGlj
dGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25h
bEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNp
bmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3Jk
PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNv
cmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVj
b3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxS
ZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlw
ZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRo
ZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1l
PElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAy
LiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5
cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVu
dGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0
aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBl
LgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBl
LgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRz
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBW
LgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQg
c3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJm
YWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJl
dHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50
ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5k
UmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1
c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5
cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAg
ICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAg
ICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYg
KGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAg
ICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBi
eSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2Ug
aGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2Vx
dWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQg
bWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQs
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0g
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNT
ZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3Ig
PSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJh
eSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRo
b2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0
dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJv
emVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9y
ID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0
aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5
cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYu
IElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0
IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAx
Mi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBl
ID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2Fu
ZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51
bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
bnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUg
PSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlm
IChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlz
dD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgor
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJl
dHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248
VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAg
ICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZm
X3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYg
dmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisK
KyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAg
ICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAg
ICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlw
ZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNE
YXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElE
TEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZh
dWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVl
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Cisg
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0
cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlh
bGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBS
ZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0o
KSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVj
dCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikK
KyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAg
ICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBh
dGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVz
b2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5n
IFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpX
cmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlw
ZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9i
amVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JS
ZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURM
SURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFu
eSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNw
YWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
VmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0g
PSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3Rk
OjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJp
YWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0g
PSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252
ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJ
dGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAg
ICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJl
c3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGgg
PSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisg
ICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1
bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0
byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVu
Z3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW50ZXJmYWNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SW50ZXJm
YWNlLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw0MTEgKzI1LDEzIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0
aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNz
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBD
bGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1h
bCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51
bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8
VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVu
dGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9y
IElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpK
U1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxz
ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0
ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2
YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAg
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4
Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252
ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
SlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlND
OjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3Bh
Y2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7
Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJu
VHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25U
eXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwg
YW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAg
ICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBp
cyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQg
d2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxl
IHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxl
ZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBv
ciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBu
dWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7
Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
c3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1l
bnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVG
cm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBO
dWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxs
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZp
ZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBlCit0
ZW1wbGF0ZTx0eXBlbmFtZSBJbXBsZW1lbnRhdGlvbkNsYXNzPiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewog
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CkBAIC00MzgsNyArNDAsNyBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElECiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgogICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQogICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKICAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFw
cGVkKHZtLCB2YWx1ZSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKQEAgLTQ3Mywx
NDI4ICs3NSw1IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjwKICAg
ICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4g
ewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVk
U2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMg
aW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJl
cik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVp
bnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQz
MkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRv
VUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2
NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1w
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExM
b25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2
NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlw
ZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIp
Ci0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0g
ICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0
YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmlj
dGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBu
dW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikp
KQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91Ymxl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxp
bmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91Ymxl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0g
ICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYg
dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExP
YmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
eyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
ciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaElu
SXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUs
IGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFs
aXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1w
bGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFk
ZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2Fk
IG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhl
Y1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIg
ewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQot
ICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwot
ICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclBy
b3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2Vu
ZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBl
IHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5n
dGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24g
dG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgp
ICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0u
Z2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZh
bHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBk
b3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0
YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNp
bmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlm
ICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmRO
b25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6
OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhp
bmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250
aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXRE
aXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6
UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlw
ZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
U2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsK
LSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5h
cHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0
dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxp
c3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAg
IGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2Jh
bE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJl
ZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVj
b3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
U3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
aWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5
dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAg
ICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxl
bWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50
YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJl
Y29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVs
bCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlw
ZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUg
PyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4g
TGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAg
ICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAg
ICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9v
bCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0
YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1
bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUg
LyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAg
ICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAg
ICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2
YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6
SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAg
ICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAg
IGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8v
IDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2Yg
dHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6
Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
NC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUg
dG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4g
d2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90
aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVl
KS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUg
fSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVz
dWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
TWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
IAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90
b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3Rh
dGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChr
ZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6
IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8g
YW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBu
b3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4g
SWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFs
dWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAg
ICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFp
ci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0
YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVh
dGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNz
ZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQs
IGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBE
aWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBk
aWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlv
biB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVy
YXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0
YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENh
bGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFs
dWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRp
YyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFz
T2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25h
bENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4K
LXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5U
eXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNw
YWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+
Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAg
ICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwg
ZmFsc2U+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFs
RnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9u
Pjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNp
bmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUg
VHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVt
ZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNU
eXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5
cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlw
ZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURM
RW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6
OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
U3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJp
bmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdU
eXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVl
bmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VU
eXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5j
ZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVu
Y2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5k
OjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlv
bi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3pl
bkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVz
aW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExE
aWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46
OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8
fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0
aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAg
dXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlz
dCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3Jk
VHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2lu
ZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3Jk
VHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIElu
dGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFj
ZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEg
bnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJy
aWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46
OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0
ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVu
aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAg
Ly8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGlj
dGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmICho
YXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
RGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmICho
YXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNv
cmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRm
b3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFu
IGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRo
YXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChi
cmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVl
KSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwot
ICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRv
JiYgdHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUp
Pjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUg
PSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNp
bmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNp
bmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3
VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUg
PSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRh
dGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBp
ZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFs
dWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBr
aW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxs
KiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFs
dWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2Yg
R2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNy
ZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0
aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVy
YXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1
ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAy
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRN
ZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4g
UmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAz
LiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRp
bmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0
aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAw
OwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRl
cmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJv
emVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcg
ViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
RGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3Jk
VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5
cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sg
aW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIu
NSkKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVj
dCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBv
YmplY3QgVi4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFs
dWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4s
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAg
IGlmIChoYXNCb29sZWFuVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigp
KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xl
YW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNU
eXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdU
eXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAg
IGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5n
VHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQot
ICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAg
ICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBO
dW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYg
KGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVh
biwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAg
ICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4u
Lj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxp
c3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5
cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2Fu
ZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXpl
PEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAg
IGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxK
U0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1
ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUg
V1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0g
ICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJp
Z2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2
YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBB
U1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7
Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERh
dGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsK
LSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZz
dGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBh
cnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFs
dWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVj
dCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2
ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5l
cjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0
ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgm
c3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwg
dmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRo
TlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9
Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJH
TEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZh
cmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAg
ICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50
ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRl
bT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBW
ZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXpl
X3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBh
cmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0
IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBz
dGFydEluZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7
Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6
bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExU
eXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4
OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFk
aWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0
ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZh
bHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsK
LX0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRKU09OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0SlNPTi5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEpTT04uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1
ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9
OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJl
YXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIg
eworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRp
b24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFy
c2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0
aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9u
IC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmlu
ZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0
YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFs
T2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBm
YWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
VSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+
KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkK
K3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIg
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpK
U1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtu
b3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1w
bGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsK
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51
bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+
OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRo
ZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBk
dWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51
bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBb
VHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUg
VD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNl
d2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRl
ZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgor
ICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVz
aW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAg
fQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Y29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlv
blR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxl
KHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xl
YW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZh
dWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAg
IH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3Vw
cG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6
OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlw
ZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQor
ICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCog
cCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4o
cCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3Qg
UmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsg
fQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAg
c3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50
OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9j
dGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
eworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUg
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91Ymxl
IG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIo
JnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
TG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9h
dDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikK
KyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3Vi
bGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBB
ZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3Ry
aW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFs
dWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1
cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUu
aXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBK
U0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJs
ZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1
ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
V1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9u
IGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRl
ZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAg
Ly8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUs
IFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAg
ICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVy
dGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAg
ICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAg
ICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAg
ICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xG
YXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29u
dmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJv
dz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6
OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6
OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRl
eFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJ
bnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRv
IGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRW
YWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkp
OworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5l
cmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpT
T2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICgh
SlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0Fy
cmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJh
eS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2Vy
dmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
Pmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBl
TWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNT
aGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6
anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdElu
ZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5U
eXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0
YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5j
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlND
Ojpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96
ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERl
dGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byog
YXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0
LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4
ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlw
ZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdU
eXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJp
bmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlm
aWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmlu
ZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
UmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRp
b25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEss
IFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1
cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlz
IG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpK
U09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tP
d25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMo
JnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdl
dE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25N
b2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9y
ZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEu
IExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpT
Qzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdl
dERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtl
eSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5l
ZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVm
aW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBl
bnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5p
c1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9m
IHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlm
aWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAg
Ly8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBz
dWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0
IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYu
CisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0
KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0
eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBl
ZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8g
aXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlz
IGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNl
LCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBl
JiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAg
ICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUp
LgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Cisg
ICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFs
dWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7
CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01B
U2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1
aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlm
aWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2
YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8g
ZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVl
KTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVy
dHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSBy
ZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5
VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNy
ZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRl
ZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25h
cnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25h
cnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51
bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhl
eGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sg
ZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBp
ZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZn
bG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0
cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3Qo
dmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVy
dGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0
IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBz
dHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Cisg
ICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVz
aW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4K
KyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9
IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBl
OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQu
Li4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBl
ID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpU
eXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlw
ZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09
IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVt
ZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAw
PjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJh
dGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxT
dHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdU
eXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9y
IDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUg
PSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9
IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09
IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNl
cXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZG
cm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwor
ICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlU
eXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGlj
dGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25h
cnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7
CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0Rp
Y3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBE
aWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNE
aWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRU
eXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9
PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVj
b3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29y
ZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2Vx
dWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFy
eVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNl
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdh
bmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJs
ZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6
YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7
CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVs
bCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1l
bWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMg
ZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJ
ZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5
VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rp
b25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9u
YXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVz
IGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29y
ZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUs
IGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2Jq
ZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJm
YWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhh
dCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0
eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBh
IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6
OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAg
ICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBl
KSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBl
Ojp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVu
YW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdU
eXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFw
cGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6
V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBw
ZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3Rl
ZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlw
ZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1
cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Yg
b2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwg
PSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0
aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAg
ICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBh
biBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRo
b2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0
dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJ
ZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcg
YQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlw
ZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBS
ZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlw
ZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChW
LCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5J
ZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1l
dGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlw
ZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFs
dWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJh
eVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAz
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRo
YXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFy
eVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9u
YXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEg
cmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFz
UmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZh
Y2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBp
bnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBW
LgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhl
bjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29u
c3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6
aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhh
c0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0
Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBi
cmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhh
c1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBo
YXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAg
IC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlm
IChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNU
eXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKwor
ICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9v
bGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNC
b29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAv
LyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewor
ICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5
cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtl
X3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVt
ZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBp
bmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNW
YWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihb
Jl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAg
ICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0
dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjph
dDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2
YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChy
ZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2
YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJp
YWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpT
Qzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlz
dGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2
ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7
CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0g
VDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkp
OworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlv
blRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1
cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29s
dmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
KyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9
OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMg
dGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1
cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8
VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisK
KyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVz
dWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJ
RExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJ
dGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1
bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50
czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0
eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVy
dFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5k
ZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBp
ZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0
IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpD
b250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0
aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkp
OworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxs
b3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsK
KyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRKU09OLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0SlNPTi5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRKU09OLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE2
ODkgKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgi
Ci0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgi
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5j
bHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+
IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwot
Ci1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5m
b3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8v
IFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJz
aW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsK
LSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBm
cm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRo
cm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0
ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
dHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQot
ICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkK
LXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9u
KCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFs
dWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4m
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlw
ZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgot
ICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0
aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURM
QW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFi
bGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMg
bm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBw
ZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUg
d2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBp
cyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUg
SURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8g
Tk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlm
IFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlw
ZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQu
Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
dGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1
c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
VDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxs
VmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51
bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0
cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMg
Ym9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jv
b2xlYW4odmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZl
cj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1
c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBB
cnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1
cHBvcnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVy
ZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6
VG9XcmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAg
IFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQot
bmFtZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1
cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
Z2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkg
eyByZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExCeXRlPiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZh
dWx0Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGlu
dDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5zaWduZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewot
ICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRv
SW50MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAg
ICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0
dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJl
dHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0
b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9J
bnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
SW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0
dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGlu
ZyBwb2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShu
dW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3Vi
bGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihu
dW1iZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZs
b2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAg
IHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50
b051bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3Vi
bGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5p
dGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAg
c3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAg
IH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3Ry
aWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNv
bmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFz
RW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmln
dXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0
eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5
cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFt
ZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVj
dCkKLSAgICAgICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAg
ICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYg
dm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMg
aXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURM
TG9uZy4gVG8gYWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQg
YW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0
YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5
KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJh
eUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0
IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5k
ZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
SW50MzIoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVl
IHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250
aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRv
dWJsZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJl
Y3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwot
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewot
ICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0Nv
bnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsK
LSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAg
ICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAg
ICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3Rv
Y29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJl
c3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8g
dGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
SlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYg
SlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9
PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhW
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQo
KTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETExvbmc+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGlu
ZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAg
ICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwot
ICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2Jh
bE9iamVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3pl
bkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2Vx
dWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAg
ICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQp
KTsKLSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxs
cHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+
IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRl
bnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJp
bmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAg
ICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxL
LCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBL
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5z
dGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVm
aW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAv
LyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7
Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBM
ZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwot
ICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMs
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkg
b2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsK
LSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5
KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAg
ICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0
b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRl
c2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3Ig
ZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0
Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRl
c2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQg
dG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5
ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwot
Ci0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAg
ICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAg
ICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElE
TCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29u
dmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0
IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMg
Y2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXks
IHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwg
dHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYu
IFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29y
ZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUo
JU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNo
IG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5
VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNv
bnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhp
cyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAg
ICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAy
LiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4K
LSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
a2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUg
ISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAg
ICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAg
ICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4g
cmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkp
Ci0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+
PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4o
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVy
dEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjph
c09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7
Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3Jl
YXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZh
Y2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0
IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0
eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRy
dWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19
OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4K
LSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxG
cm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAg
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcg
Q29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0
LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+
IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3Qg
PSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJl
ck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2lu
ZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJP
Zk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNo
ZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2Fu
ZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAg
IHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1i
ZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6
OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVz
aW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5B
cnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+
OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFy
eVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
IT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlv
bmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+
PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAw
OwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0
LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RU
eXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAr
IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0g
ICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUg
aW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051
bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJp
Z2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBi
ZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAg
Ly8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAg
IAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAg
ICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAg
ICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBW
IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAg
ICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJ
REwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8v
ICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAg
ICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6
XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0
dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlz
dD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVj
bHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVu
dGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAg
ICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAg
ICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBj
YXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBl
KEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAg
ICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElm
IFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAg
SlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAo
Y2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UK
LSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0
aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0
aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhl
IHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNl
cXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9y
TWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVz
dWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVu
IGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRv
ck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
Y29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElm
IHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBh
bmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5j
bHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVu
Y2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEg
Qm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9v
bGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjph
bnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1
ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVh
biwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0
aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0
eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNp
emU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNU
eXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0g
MDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmlj
IHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29s
ZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgot
ICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1
c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxl
bWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVu
Y2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2
YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAg
IHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6
Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZv
cl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkg
PSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlw
ZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAg
ICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdU
Rjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwot
Ci0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1
ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0Rh
dGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0K
IHRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMSlNPTj4gewogICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0xNzI1LDE3NiArNDgsNCBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CiAgICAgfQogfTsKIAotLy8gTUFS
SzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0
YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxU
PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQot
ICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxz
ZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVy
biBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVz
b2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQ
YXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJD
bGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkK
LSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxP
YmplY3QsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0
YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVu
YW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxv
cHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRl
bT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFj
ZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4g
c3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0
eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVz
aW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsK
LSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRp
b25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVy
PElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRl
LmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAg
cmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlh
ZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVl
ID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3Rh
dGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAg
ICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdU
Rk1vdmUocmVzdWx0KSB9OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdWxsLmgJKHJldmlzaW9uIDIx
MTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjEx
NTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxp
dGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4g
SW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisK
K2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZv
cmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNp
b24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUg
Zm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rk
OjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9u
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZy
b20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRl
JiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
ZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQor
eworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBl
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRp
b25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExB
bnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxl
Q29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBu
b3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBl
cmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3
aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlz
IGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJ
REwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBO
T1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBl
IFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4K
KworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVs
bD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBi
b29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9v
bGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBs
YXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVy
PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFy
cmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3Vw
cG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJm
YWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpU
b1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
UmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCitu
YW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQ
dHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVy
biBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7
IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50
MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Cisg
ICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9J
bnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAg
IHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0lu
dDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5n
IHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3Vi
bGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKwor
ICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51
bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxv
YXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAg
c3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJs
ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmlu
aXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBz
dGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAg
fQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5
dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1
cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5
U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmln
dXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0
eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlw
ZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6
OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1l
IElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0
KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAg
IGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2
bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
Ly8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExM
b25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBh
biBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRh
a2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXko
b2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQg
ZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRl
eGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJ
bnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUg
fHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDAp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91
YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVj
dEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Cisg
ICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29u
dmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAg
ICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVz
dWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0
aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBK
U0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBK
U0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGlu
ZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgp
OworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3Vi
bGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5l
Q2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Cisg
ICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFs
T2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
ZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlu
bGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAg
ICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkp
OworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxw
dHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25z
dHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisK
KyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4g
eworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmlu
Zz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAg
ICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3Ry
dWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEss
IFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6
OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0
YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZp
bmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8v
IDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsK
KyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExl
dCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Cisg
ICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywg
SlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBv
ZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewor
ICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkp
LgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAg
ICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRv
cikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVz
YyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBl
bnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQK
KyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVz
Y3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0
byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkg
PSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisK
KyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAg
ICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURM
IHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252
ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQg
aXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBj
YW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwg
dHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0
eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4g
UmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSgl
T2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2gg
bWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlW
YWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29u
dmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlz
IHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAg
ICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIu
IExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgor
ICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBr
ZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAh
IENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAg
IGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAg
IC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiBy
ZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25h
cnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
RW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0
RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxU
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFz
T2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVh
dGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFj
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0
ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3Qg
Q29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1
ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVj
dCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wg
Y29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgor
ICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZy
b250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBD
b25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3Qs
IGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
eworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9
IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5k
OjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9m
TnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hl
Y2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5k
OjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMg
PSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJl
ck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5
cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAh
PSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9u
YXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmln
YW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7
CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3Qs
IGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5
cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsg
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAg
ICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBp
bmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVs
bFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmln
YW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJl
IHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAv
LyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAg
CisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAg
aWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAg
ICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAg
ICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYg
aXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4g
dGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAg
ICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAg
ICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpf
MT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0
PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNs
dHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNh
c3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUo
SW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYg
ViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBK
U0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChj
ZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQor
ICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRo
YXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRo
ZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUg
cmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2Vx
dWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JN
ZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1
bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4g
YXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9y
TWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYg
dHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFu
ZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNs
dWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBC
b29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29s
ZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVl
OworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFu
LCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRo
ZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5
cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6
ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5
cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
MTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAw
OworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMg
dHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xl
YW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisg
ICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVz
aW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5j
ZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZh
cmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAg
eworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9y
X2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9
IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBl
Ojp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RG
OjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisK
KyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
LnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0
ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0
cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQ
dHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZn
bG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2
ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAg
IGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJy
ZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFS
SzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExX
ZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBw
b3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVy
dGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBW
YXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURM
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisK
KyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9w
dGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1l
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29u
dGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENv
bnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1l
bnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4g
eyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252
ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
c3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRh
aWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShy
ZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdWxsLmgJKHJldmlzaW9uIDIxMTU0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMzU0ICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpT
RE9NQ29udmVydEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9u
IGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsK
LQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCko
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24p
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4
Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25U
aHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRp
Y3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rp
b25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBi
eSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51
bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dl
cj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0K
LS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNp
YWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRv
SlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5l
ZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZl
cnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0
ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVj
dCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVy
dGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3Qm
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFko
dmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0
ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
bk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVl
LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpT
VmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9u
ZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQo
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5
cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7
Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAx
LiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwg
dmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQg
dG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlv
bgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwg
dGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4K
LSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8g
Mi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUg
SURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBp
bm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2Vy
PihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxh
YmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVs
bGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xv
YmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZh
bHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxl
KHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KIHRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewogICAgIHN0
YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KQogICAgIHsKQEAgLTM5MCwxNTExICs0Nyw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGw+IHsKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFu
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9
Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBv
cnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6Okdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFw
cGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7
Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9
IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHAp
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHAp
OyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJl
ZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0K
LQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0
YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1
cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0lu
dDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgo
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3Rl
dD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsK
LSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAg
cmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAg
fQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZz
dGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExv
bmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewot
ICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAg
ICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0g
ICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICBy
ZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRk
IG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmlu
ZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlz
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlND
Ojphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBB
cnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUo
JnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBm
b3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQg
Zm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8v
IHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBU
aHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAg
ICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5
cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRl
cjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAg
ICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAg
ICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFz
dEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
LSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/
Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJ
bmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6
OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50
MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
aW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBk
b3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsK
LSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJp
Y0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpT
Qzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252
ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXkt
Pmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5s
ZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1h
c2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hh
cGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6Ompz
VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRl
eCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlw
ZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJs
ZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikK
LSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9K
UzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6
Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFy
cmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwg
bGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVj
LCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUK
LQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlw
ZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5n
KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmll
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmco
c3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4g
c3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJl
Y29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9u
VHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBl
OwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBW
Pi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJu
IHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBu
b3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1
cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3du
UHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2
bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAg
ICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRl
cjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBM
ZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXRE
ZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXks
IGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQg
YW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmlu
ZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51
bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAg
IC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0
eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmll
ckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8v
IDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3Vi
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0
eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgot
ICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChz
dGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlw
ZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRW
YWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlz
IGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBj
YXNlLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwg
YXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYg
bWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAg
ICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4K
LSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAg
ICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVl
KSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewot
ICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWly
ZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmll
ciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFs
dWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVz
VmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7
Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5
KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZh
bHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVh
dGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBU
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhl
YywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1
bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlv
bjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9u
VGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYg
KCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xv
YmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZh
bHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3Ry
dWN0IENvbmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2lu
ZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0g
ICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0
eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlw
ZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVM
aXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAw
IHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVy
aWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25k
aXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRp
b248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3Ry
aW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlw
ZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAw
PjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAw
IHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1
ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBD
b25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAh
PSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZy
b3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAg
ICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlw
ZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rp
b25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5
PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwot
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0
aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGlj
dGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGlj
dGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlw
ZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0g
MCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29y
ZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
UmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVl
bmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUg
dHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwot
ICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGws
IGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1i
ZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4
cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5
cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFy
eVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRU
eXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVj
dCwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFj
ZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSBy
ZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjph
bnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAg
ICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkg
ewotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6
dHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46Oldy
YXBwZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVy
VHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRW
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUo
Y2FzdGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJu
VmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igc3RlcHMgNSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9i
amVjdCwgdGhlbjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0g
dmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGlt
aXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAg
IC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4g
b2JqZWN0LiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUg
ZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0
dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUs
IGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwg
QEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZB
YnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRo
b2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUg
ZnJvbSBWIGFuZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJl
dHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlU
eXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0
IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlU
eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFy
eVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJl
Y29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1Jl
Y29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50
ZXJmYWNlIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiBy
ZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBv
YmplY3QgYW5kIHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46
Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6Omlz
X3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNC
b29sZWFuVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46
OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAg
aWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
TnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJp
Z2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNT
dHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFz
U3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAv
LyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAo
aGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlw
ZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAg
ICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xl
YW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9v
bGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8g
MTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAg
ICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBl
bmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9z
ZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVu
dGF0aW9uVHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5k
ZXggPSB2YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFs
dWU+IHJldHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZd
KGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1v
dmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAg
ICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVy
blZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8
VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFy
aWFudCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0
dXJuVmFsdWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3Rh
dGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFs
dWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpT
T04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6
OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3Rl
bmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6
OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsK
LSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25U
aHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJu
VHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZl
cjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0j
aWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRh
aWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0g
ICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8q
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3Vs
dCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
LSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURM
VHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRl
bT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1l
bnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7
Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlw
ZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRW
YXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4
KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYg
KHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9
OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29u
dGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgg
LSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsK
LSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9w
dCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnROdWxsYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydE51bGxhYmxlLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0
SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9u
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFt
cCB9OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwg
VHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5
IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8
dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVy
YXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4g
cGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1l
cmF0aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0
aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElE
TCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0
cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVk
c1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xv
YmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVl
LCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4g
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7
CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZh
bHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pT
PFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1
ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAg
IHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2Vw
dGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0
ZXIgeworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5
cGU7Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlND
OjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2Ug
RGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisg
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJz
aW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7Cisg
ICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlw
ZTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBl
PFQ+OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5k
IHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAv
LyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBh
IG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0
aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5
cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBl
bHNld2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1
bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxs
LgorICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cisg
ICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRh
dGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
VDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxs
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJv
b2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJv
b2wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwor
ICAgIH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRS
ZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcg
c3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFk
YXB0b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJu
VHlwZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2Jq
ZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5M
SUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFp
bCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3Qg
VCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxU
Jj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29u
c3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQo
KTsgfQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Cisg
ICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRv
SW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE9jdGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9y
dD4geworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxp
bmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAg
ICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50
MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdM
b25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJl
cikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkK
KyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisg
ICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRp
YyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAv
LyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
U3RyaW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYg
dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1
ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICBy
ZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFs
dWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVj
dD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZt
LCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVy
YWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNW
YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0
aW9uIGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1l
bnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisg
ICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2Yg
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3Rh
dGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Cisg
ICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29u
dmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAg
ICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVz
dWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0
aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBK
U0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBK
U0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4
aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUu
aXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClb
aV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJs
ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUs
IGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBH
ZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJu
VHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlm
ICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpK
U0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFh
cnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9i
c2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1No
YXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3Vv
dXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpT
Qzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVj
dEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
RG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewor
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVj
dG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAg
ICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVu
ZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4g
SlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExG
cm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJv
emVuQXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsK
KyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5h
cHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0
byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUo
JmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQg
dHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJp
bmdUeXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8
PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5z
dHJpbmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVu
dGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0
cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRl
bnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50
YXRpb25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3Jk
PEssIFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCBy
ZXR1cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8p
IGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8u
W1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtl
eXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3Qt
PmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRp
b25Nb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0
IG9yZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8v
IDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAg
IEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRp
ZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUs
IGtleSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVm
aW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVu
ZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAv
LyBlbnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUo
KS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVl
IG9mIHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVu
dGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAg
ICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0
byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4g
TGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBl
IFYuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252
ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJ
ZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0
eXBlZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVu
IE8gaXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0
aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3
aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgor
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQu
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
SywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBU
eXBlJiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisg
ICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlw
ZSUpLgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7
CisgICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwg
dmFsdWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFw
KSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBF
Q01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCBy
ZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVu
dGlmaWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBi
ZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1
dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZh
bHVlKTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJv
cGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQg
PSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
a2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6
IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3Jl
YXRlZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rp
b25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERp
Y3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAg
ICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rp
b25hcnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGlj
IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9K
UyhleGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJh
Y2sgZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAg
ICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSks
ICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJl
ZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmpl
Y3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29u
dmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3Ry
dWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUo
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2Ug
RGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAg
ICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+
CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAg
IHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxz
ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9u
dCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0
eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVz
ID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
bnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAh
PSAwPjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVt
ZXJhdGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJp
bmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5
cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVz
ICE9IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VU
eXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJy
YXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcg
RGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rp
b25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFs
dWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25h
cnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2lu
ZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBo
YXNEaWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNv
cmRUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBl
cyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
cmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJl
Y29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBl
PjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9m
U2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlv
bmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJm
YWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJy
aWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxs
YWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURM
IHZhbHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFs
dWU7CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURM
TnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVk
IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24g
aXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAz
LiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0
aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5
cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1Jl
Y29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5
cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0g
b2JqZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50
ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
dGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBp
cyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdh
bmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsK
KyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAg
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0
eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBS
YXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBX
cmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBl
Pjo6V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNh
c3RlZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9u
VHlwZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChy
ZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQg
b2Ygb2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
b3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAg
ICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBp
cyBhbiBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRN
ZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4g
UmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAz
LiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRp
bmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQg
dHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNl
VHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhv
ZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1
cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElm
IG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBh
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQg
dHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwg
dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRv
cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5B
cnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRv
IHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlv
bmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0
aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVz
IGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwg
aGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRl
cmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBpbnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0
aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVj
dCBWLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwg
dGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0
ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYg
KGhhc0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVM
aXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAg
ICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUg
PSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYg
KGhhc1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBl
LCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAg
ICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAg
IGlmIChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVy
aWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KworICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFz
Qm9vbGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBo
YXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAg
ICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
eworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9
IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9
IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjpt
YWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1w
bGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0
byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6
SlNWYWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNl
PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6
OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAg
ICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCgh
cmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5k
OjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVl
Pih2YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VS
VChyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRl
LCB2YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2Uo
JnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6
IEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQg
TGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+
PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVy
ID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0
ZSkpOworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBS
ZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9
Cit9OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFk
aWMgdGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZh
Y2U8VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47
CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigq
cmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZl
cnRlckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3Rv
cjxJdGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBh
cmd1bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3Vt
ZW50czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29u
dmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0
SW5kZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAg
ICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxs
b3B0IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpDb250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
aSkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpu
dWxsb3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUp
KTsKKyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnROdWxsYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGxhYmxlLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGxhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDI0NiArMjUsMzQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJC
dWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRBbnkuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5n
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVl
IC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
OwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwg
RW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dl
ciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0K
LS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252
ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBj
b2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
dGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsK
LSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikK
LXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmln
dXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lv
biBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2Vu
ZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OworbmFtZXNwYWNlIERldGFpbCB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCitzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQot
ewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2
YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAg
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4
Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9K
UzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9i
amVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVk
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFs
dWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVy
dGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25U
eXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAg
IHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9CitzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CiB9OwogCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwot
ICAgIH0KK3RlbXBsYXRlPD4KK3N0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlw
ZTsKIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNl
IERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAot
ICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVy
c2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewot
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5
cGU7Ci0gICAgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CkBAIC0z
NzAsMTUzMSArMTU4LDUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+
IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9C
b29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8g
QXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6
OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJW
aWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsK
LSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47
Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5
cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5n
IFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpX
cmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlw
ZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkK
LSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBj
b25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQ
dHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHAp
IHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0
UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBz
dGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9V
SW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
U2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGlj
IHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUlu
dDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0
YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0
dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1
ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25n
TG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9u
Z0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xv
bmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0K
LSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25G
aW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0
YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJs
ZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJl
cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBm
b3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJs
ZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUu
dG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0
ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VT
VlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgot
ICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3Qo
dmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0
eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1
cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNP
YmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6
OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZl
cnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMg
dHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURM
RmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZv
ciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwg
ZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
LSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2Vu
ZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpK
U09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAo
IUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWND
b252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNB
cnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJy
YXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNl
cnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZl
cnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFw
ZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3Vz
U2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1
dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJh
eS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUu
YXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIg
PSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJh
eShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
SlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmpl
Y3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0K
LSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgp
OwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBp
KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRl
eFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwot
Ci0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNl
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAg
ICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFy
cmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsK
LSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6
Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAg
ICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlm
aWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVu
dGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVu
dGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJp
bmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAg
dXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2lu
ZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0
IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAg
IC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwg
dGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1
bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5
c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVw
ZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAg
IGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUg
PyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURl
c2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9
IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAg
ICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltb
RW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0
aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1v
ZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
JiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQg
dHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAg
ICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8
Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFs
dWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBi
ZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAg
ICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZh
bHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFs
cmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAg
ICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9i
amVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byBy
ZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7
Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0
IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAg
IC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUu
Ci0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBu
ZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpT
VmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRl
ZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9K
UzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAg
ICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVz
S2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5
KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVl
LgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERp
Y3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBl
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5j
dGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNG
dW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxi
YWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFj
a0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9i
YWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFt
ZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRp
b25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29u
ZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJy
aWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0
PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAg
ICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0
YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxU
Li4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJP
Zk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAg
IHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6Omlz
X2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0
Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1
c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNl
cXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7
Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAg
ICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJv
emVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUg
PSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBl
PjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUg
PSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsg
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1i
ZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3Qs
IHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYg
KGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9m
IHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBi
ZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBv
ciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1Jl
Y29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFy
eSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRp
Y3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNE
aWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBy
ZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0g
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0
IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRv
IHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6
OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RG
OjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAg
ICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7
Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3Jh
cHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVl
KSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUg
LSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46
Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXND
ZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2Vs
bCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9s
bG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUg
ZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJh
dG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdCht
ZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBu
b3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQg
bWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1Nl
cXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5j
ZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3Ip
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhv
ZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1
bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQg
bWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJh
eVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJv
emVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5
IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNE
aWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlw
ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBl
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJ
REwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBz
dGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJv
b2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUp
IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMu
IElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAw
OwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBl
LCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5n
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlw
ZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8
U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5
cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNU
eXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVy
aWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBh
IFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUu
Li4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6
VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJp
Z2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+
Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1l
bnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFu
dC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5W
YWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlw
ZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZl
cmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZh
bHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJ
Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
dHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVh
dGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2
YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFs
dWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlm
ICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxU
PjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShX
RUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pT
VmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRp
b25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAg
ICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAg
ICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBD
b252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBl
Pjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAg
ICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0g
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFp
bDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1
bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBz
aXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4
ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5
cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRl
eCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlm
ICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAg
IHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVt
YmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0TnVtYmVycy5jcHAJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ4MiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
U2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1p
Y2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisK
KyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIkpT
RE9NQ29udmVydC5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVk
ZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQor
eworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKK30KKwor
SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5n
JiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7Cisg
ICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdP
clVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAo
cy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpz
U3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJp
bmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
U3RyaW5nJiYgc3RyaW5nKQoreworICAgIGlmICghc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgp
KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1N0cmluZyBpZGVudGlm
aWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5z
dHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RG
TW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5n
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUs
IFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1
cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0
IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vycm9nYXRlcy4KKyAgICBpZiAoc3RyaW5n
LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvIGNvZGVQb2lu
dCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNv
ZGVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcm
JiBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBh
cmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAgICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRl
KHN0cmluZykpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisKKyAgICAvLyBTbG93IHBhdGg6IGh0
dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW9idGFpbi11bmljb2RlCisgICAgLy8g
UmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0
ZXIuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0
eShzdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9OworICAg
IGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAo
VV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVw
bGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGNvZGVQb2ludCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30K
KworU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQoreworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmlu
ZygpOworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQor
CitTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5n
KCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJl
dHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitKU1ZhbHVlIGpz
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGF0ZUlu
c3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5k
YXRlU3RydWN0dXJlKCksIHZhbHVlKTsKK30KKworZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhl
eGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7
Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IEpT
Qzo6YXNPYmplY3QodmFsdWUpOworICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBl
IGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgm
c3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1i
b2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxs
YWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICBy
ZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQz
Ml90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7CitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50
MzIgPSAta01heEludDMyIC0gMTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0g
MHhmZmZmZmZmZlU7CitzdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAw
MDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJl
cHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KKworc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3Ry
aW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKK3sKKyAgICByZXR1cm4g
bWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFs
dWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNN
QVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgp
LCAiXSIpOworfQorCitzdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQoreworICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgeworICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0s
IG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHggPSB0cnVuYyh4KTsK
KyAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVt
KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Cit9OworCit0ZW1wbGF0ZSA8
Pgorc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IGludDhf
dCBtaW5WYWx1ZSA9IC0xMjg7CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEy
NzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJe
OAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKKyAg
ICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4K
K3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQg
bWluVmFsdWUgPSAtMzI3Njg7CisgICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3
Njc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8v
IDJeMTYKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4g
eworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwg
IlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAg
dHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBp
ZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmln
aHQgcmFuZ2UuCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IGQg
PSB2YWx1ZS5hc0ludDMyKCk7CisgICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1
ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1p
blZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOwor
ICAgICAgICB9CisgICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQg
LSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKKyAgICB9CisKKyAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0
c1RyYWl0OjptYXhWYWx1ZSk7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+
KHgpOworICAgIH0KKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwg
IXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkp
IDogZmxvb3IoZmFicyh4KSk7CisgICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9m
VmFsdWVzKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1h
eFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3Vs
ZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBl
ZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRo
ZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0
IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90IGQg
PSB2YWx1ZS5hc1VJbnQzMigpOworICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAs
IExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgorICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFt
cFRvPFQ+KHgpOworICAgIH0KKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYo
eCkgfHwgIXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZh
YnMoeCkpIDogZmxvb3IoZmFicyh4KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2Qo
eCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Cit9CisKK2ludDhfdCB0b0ludDhFbmZv
cmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJl
dHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKwordWludDhfdCB0b1VJbnQ4RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50OF90IHRvSW50OENsYW1wKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wKTsKK30KKwordWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9
CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQoraW50OF90IHRvSW50
OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxs
ZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3Rl
dAordWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0
b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJh
bmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCitpbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50
MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
KTsKK30KKwordWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0CitpbnQxNl90IHRvSW50MTYoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNo
b3J0Cit1aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCitpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMy
LCBrTWF4SW50MzIpOworfQorCitpbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4
KTsKK30KKwordWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFs
dWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKK30K
KworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCit1aW50
MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBl
bmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOworfQorCitpbnQ2NF90IHRvSW50
NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorewor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uo
c3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKK30KKwordWludDY0X3Qg
dG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNl
UmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOworfQorCitpbnQ2NF90IHRvSW50NjRD
bGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8g
MCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91Ymxl
Pih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKK30KKwordWludDY0X3QgdG9V
SW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFu
KHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4
PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKK30KKworLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKK2ludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZp
bml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAg
ZG91YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwordWludDY0X3QgdG9VSW50
NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkg
dG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBuOworICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1i
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnROdW1iZXJzLmNwcAkocmV2aXNpb24gMjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE1
MiArMjAsMTYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgogCi0jaW5jbHVkZSAi
Q2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29tbW9uVk0uaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnQu
aCIKLSNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5o
PgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotfQot
Ci1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsK
LSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmlu
Z09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlm
IChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0
cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5TGF0aW4x
KCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQotU3RyaW5nIGlkZW50
aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVy
LnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBX
VEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJp
bmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29w
ZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGhhc1VucGFpcmVk
U3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgOC1i
aXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgotICAgIGlmIChzdHJp
bmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGF1dG8gY29kZVBv
aW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUo
Y29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0cmlu
ZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlmICghaGFzVW5wYWlyZWRTdXJyb2dh
dGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQotICAgIC8vIFNsb3cgcGF0aDog
aHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUKLSAgICAv
LyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50IGNoYXJh
Y3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5nIH07Ci0g
ICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlm
IChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChy
ZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwot
fQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19
Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
cmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLUpTVmFsdWUg
anNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQotewotICAgIHJldHVybiBEYXRl
SW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQot
ICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAgICBpZiAoIXZhbHVlLmluaGVyaXRz
KGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIo
KTsKLX0KLQotYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0g
SlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5
cGUgY2FsbFR5cGU7Ci0gICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9k
KCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5
bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNh
bGxhYmxlIikpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLQotICAg
IHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKLX0KLQogc3RhdGljIGNvbnN0IGlu
dDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZmZjsKIHN0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5J
bnQzMiA9IC1rTWF4SW50MzIgLSAxOwogc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIg
PSAweGZmZmZmZmZmVTtJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0TnVtYmVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydE51bWJlcnMuaAkocmV2aXNpb24gMjExNTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJT
b3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURM
VHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2Vu
dW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
CisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNv
bnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51
bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dl
cj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBK
U1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVy
YXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNv
bnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVj
dD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0
ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7
CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4m
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8
SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlw
ZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29u
dmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRv
IFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJs
ZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0
Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Cisg
ICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJl
LgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVk
LCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAv
LyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0
aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwg
c3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3Rh
dGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxl
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9
OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQu
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVk
UmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Cisg
ICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFv
YmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0
cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRp
YyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4g
eworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
T2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAg
ICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQor
CisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxv
YXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7
CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAg
ICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
b3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92
ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1l
ZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
LnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0
eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlz
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVy
biB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjph
c09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJh
eS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRp
b25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0
YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3Ig
bnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9y
IHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1
cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJv
d1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1
c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+
OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAg
ICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAg
SlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAg
aWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFu
ZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Cisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRl
eGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNv
bnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5k
ZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdU
eXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3Vi
bGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0Nv
bnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVj
dCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6
aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSog
YXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmds
b2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5n
dGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7
CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZs
eSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5k
ZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgm
c3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6
U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAg
ICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxU
PihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29u
c3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJy
YXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3Ip
CisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRv
SlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5
ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlz
dCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBh
cnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4K
KyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3Rh
dGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJU
b1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29y
ZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlw
ZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4K
KyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJl
c3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJv
cGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwg
SlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAv
LyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoK
KyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQg
ZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNj
cmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRl
c2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5k
IGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQs
IG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVy
YXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRl
ZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8v
IDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBl
IEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNv
bnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIu
IExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBl
ZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAg
ICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0
ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRL
ZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1
ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEg
cHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNl
LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBw
ZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVu
YW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFw
KQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAg
ICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAg
ICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBp
biBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAg
ICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlw
dCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQs
IGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwg
bm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFs
dWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisK
KyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJl
c3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVl
UGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVk
IGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0
aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0
aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxs
YmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxU
Pj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2
YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFs
T2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVl
KSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0
IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0
cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0
eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAg
eworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBl
bmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElE
TFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxp
c3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8
IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRp
b25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248
VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5n
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0
cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsK
KworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+
Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8
IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5j
ZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25k
aXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAw
PjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3pl
bkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1
c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxp
c3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25h
cnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9u
YXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlv
bmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlv
bmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVj
b3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNl
VHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpf
MT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlw
ZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBu
dWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxU
eXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAg
ICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhh
c051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIg
dHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVj
dGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBp
cyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUg
fHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBk
aWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5
VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNS
ZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwg
dGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0
eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMg
YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMg
aW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8
VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAg
YnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewor
ICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlw
ZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9
IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5
cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBw
ZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlw
ZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2Fz
dGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
c3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVj
dCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFs
dWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXpl
IHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8v
IG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2Jq
ZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYs
IEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklm
QWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0
aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJv
bSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJu
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhh
c1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBp
dGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1
cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2Qg
aXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJv
bSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zy
b3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVy
blR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBl
LCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRp
Y3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29y
ZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJl
Y29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29y
ZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJm
YWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmpl
Y3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Cisg
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3Nh
bWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29s
ZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZh
bHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVt
ZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2Fu
ZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJp
bmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3Ry
aW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAx
NS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFz
TnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwg
aGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAg
ICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5U
eXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVh
blR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcu
IFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1
c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFt
ZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1
ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0
aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXgg
PSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+
IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1
dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVD
VkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBp
ZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZh
bHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlw
ZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFu
dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJu
VmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUs
IDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6Ompz
TnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVy
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExp
c3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNy
ZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAg
ICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
UmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlw
ZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYg
RU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKwor
I2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwg
Y29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAg
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJl
c3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlw
ZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47
CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJ
bmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Cisg
ICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5h
bWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJp
YWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQor
eworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0
YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9Owor
CisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFp
bmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBz
dGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9
OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0TnVtYmVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydE51bWJlcnMuaAkocmV2aXNpb24gMjExNTQ4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw0NTMgKzI1LDUwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNl
LmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVz
LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFz
ZS5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVj
dC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVl
IC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
OwotCiBlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwg
RW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dl
ciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0K
LS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252
ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBj
b2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBj
aGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
dGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0
KTsKLX0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKIHsK
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikK
LXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmln
dXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lv
biBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2Vu
ZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBF
eGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNl
cHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
LQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1
ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAg
IHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2Vw
dGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxU
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBU
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlw
ZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAK
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUg
dHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAg
ICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVu
dGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBl
OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lv
blR5cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8
SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVs
bGFibGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxs
YWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikg
aXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWlu
ZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1
dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhh
dCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0
aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAg
Ly8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2Us
IGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUg
dHlwZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBl
IFQuCi0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgdGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAg
ICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAg
ICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVs
bHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0
aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c0Jvb2xlYW4odmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1
ZmZlcj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAg
ICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0v
LyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0
dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlz
IHN1cHBvcnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0g
ICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElu
dGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
Pjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1l
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
ICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25U
aHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsK
LQotbmFtZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
Z2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyBy
ZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUg
VCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYg
cCkgeyByZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVl
KSk7Ci0gICAgfQorLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8g
aW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lmaWNhdGlvbi4KKy8vIFRoZSBjb252ZXJz
aW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9y
LCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAorLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUg
dGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCisKK1dFQkNPUkVfRVhQ
T1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9S
VCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50
MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRv
SW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JU
IHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xh
bXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMy
X3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JF
X0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0
b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVp
bnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotfTsKIAogLy8gTUFSSzogLQogLy8gTUFSSzogSW50ZWdlciB0eXBlcwpA
QCAtODIzLDEwNzggKzQyMCw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHIKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUu
dG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0
ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VT
VlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgot
ICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3Qo
dmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0
eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1
cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNP
YmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6
OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZl
cnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMg
dHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURM
RmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZv
ciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwg
ZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
LSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2Vu
ZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpK
U09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAo
IUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWND
b252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNB
cnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJy
YXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNl
cnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZl
cnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBl
IGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFw
ZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3Vz
U2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1
dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJh
eS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUu
YXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIg
PSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJh
eShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
SlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmpl
Y3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0K
LSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgp
OwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBp
KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRl
eFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwot
Ci0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNl
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAg
ICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFy
cmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsK
LSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6
Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAg
ICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlm
aWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVu
dGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVu
dGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJp
bmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAg
dXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2lu
ZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0
IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAg
IC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwg
dGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1
bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5
c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJv
cGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlO
YW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVw
ZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAg
IGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUg
PyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURl
c2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9
IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9y
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAg
ICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltb
RW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0
aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1v
ZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkg
JiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQg
dHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAg
ICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8
Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFs
dWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2Jq
ZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBi
ZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAg
ICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZh
bHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFs
cmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAg
ICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9i
amVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byBy
ZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7
Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0
IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1
dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAg
IC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUu
Ci0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBu
ZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpT
VmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRl
ZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9K
UzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAg
ICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVz
S2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGly
ZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5
KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVl
LgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERp
Y3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBl
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5j
dGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNG
dW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxi
YWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFj
a0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9i
YWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFt
ZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRp
b25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29u
ZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJy
aWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0
PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAg
ICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0
YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxU
Li4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJP
Zk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAg
IHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6Omlz
X2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0
Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1
c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNl
cXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7
Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAg
ICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJv
emVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUg
PSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBl
PjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUg
PSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsg
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1i
ZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3Qs
IHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYg
KGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9m
IHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBi
ZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBv
ciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1Jl
Y29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFy
eSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRp
Y3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNE
aWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBy
ZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0g
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0
IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRv
IHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6
OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RG
OjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAg
ICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7
Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3Jh
cHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVl
KSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUg
LSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46
Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXND
ZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2Vs
bCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9s
bG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUg
ZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJh
dG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdCht
ZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBu
b3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQg
bWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1Nl
cXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5j
ZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3Ip
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhv
ZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1
bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQg
bWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJh
eVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJv
emVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5
IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNE
aWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlw
ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBl
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJ
REwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBz
dGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJv
b2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUp
IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMu
IElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAw
OwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBl
LCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5n
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlw
ZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8
U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5
cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNU
eXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVy
aWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBh
IFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUu
Li4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6
VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJp
Z2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+
Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1l
bnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFu
dC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5W
YWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlw
ZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZl
cmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZh
bHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJ
Pj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUg
dHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVh
dGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2
YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFs
dWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlm
ICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxU
PjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShX
RUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pT
VmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRp
b25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAg
ICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAg
ICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBD
b252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBl
Pjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAg
ICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0g
ICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFp
bDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1
bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBz
aXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4
ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5
cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRl
eCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlm
ICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAg
IHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0T2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0T2JqZWN0LmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIK
KyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBD
b252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3Mg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9w
ZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQor
ICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09i
amVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBF
eGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBm
b3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29u
dmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVj
aWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24u
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBj
b252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0
aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisK
Ky8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29u
dmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVt
ZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVj
dCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUu
cmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3Rh
dGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxh
YmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJm
YWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0
cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAK
KyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0
byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcg
YXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFj
ayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0
QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFs
dWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8v
CisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJl
dHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhl
cndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMg
Zm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmln
dXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24p
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5h
bWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4g
eworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jv
b2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBB
cnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6
QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZp
ZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Owor
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsK
K307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcg
V3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46Oldy
YXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBl
Ojp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQor
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0
ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkg
eyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQ
dHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0
YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJ
bnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRT
aG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMg
dWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50
MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
c2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3Rh
dGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVl
LnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdM
b25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUu
YXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9u
Zz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKwor
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3Rh
dGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVy
OworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZv
ciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91Ymxl
KCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRl
U3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
KyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNW
U3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2
YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5
cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVy
blR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09i
amVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVy
dGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0
eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExG
bG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9y
IG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBk
b3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5l
cmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpT
T2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICgh
SlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0Fy
cmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJh
eS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2Vy
dmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXkt
Pmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUg
aW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBl
TWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNT
aGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJ
bnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5h
c0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAg
ICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5
KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZl
cnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBK
U0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVj
dCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKwor
ICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50
cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
cyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9
IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkp
OworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4
VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVl
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5
cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAg
ICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBl
bGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBn
bG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJy
YXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwor
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNl
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgewor
ICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhl
YywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpj
b25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAg
ICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNl
IERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1
Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZp
ZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJ
RExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50
aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmlu
ZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1
c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5n
IFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQg
cmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAg
Ly8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0
aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlz
XV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBl
YXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/
IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0g
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3Ip
OworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tF
bnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6
IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRo
aXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9k
ZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAm
JiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0
eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAg
ICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxL
Pjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1
ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJl
IHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAg
ICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFs
dWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxy
ZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAg
ICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2Jq
ZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJl
c3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsK
KyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQg
cmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0
byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAg
ICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAg
Ly8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4K
KyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5l
ZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNW
YWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVk
IHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pT
PFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAg
ICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNL
ZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJl
Y3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkp
LCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUu
CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGlj
dGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRE
aWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQor
ICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1
bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Q2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
UyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNr
SW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2Jh
bE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlv
bmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25k
aXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJp
Z2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+
CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAg
ICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0
LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRh
aWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQu
Li4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7
CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9m
TnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250
PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAg
dXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNf
YmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+
Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBu
dW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVz
aW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2Vx
dWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsK
KyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9m
U2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZy
b250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAg
IHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlw
ZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96
ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
PSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElE
TFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9
IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUg
PSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+
OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1
ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9
IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJl
ck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
IC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBp
cyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwg
c3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAo
aGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2Yg
dGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJl
IHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9y
IHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVj
b3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGlj
dGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0Rp
Y3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJl
Y29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAg
ICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQg
ViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVu
Y2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMg
b2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3Qs
IElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6
Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAg
ICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6
OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAg
ICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1l
IFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsK
KworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFw
cGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUp
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAt
IDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoK
KyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Nl
bGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxs
KCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xs
b3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBm
YWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0
b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1l
dGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5v
dCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBt
ZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2Vx
dWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNl
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvciku
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9k
KS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVu
ZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBt
ZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5
VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96
ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkg
dHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0Rp
Y3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBl
LgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUu
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
Y2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0
ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9v
bGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4g
SWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
TnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7
CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUs
IGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBl
LgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxT
dHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5
cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJp
Y1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYu
IElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEg
VHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBl
ID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpU
eXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmln
YW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46
OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVu
dGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50
LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZh
bHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBl
KSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFs
dWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwor
ICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
SlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZh
bHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0
ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZh
bHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1
ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYg
KCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+
OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3Qg
PSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAo
VU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdF
QkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNW
YWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlv
bnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
KyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAg
IHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVz
dWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAg
IHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
ICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
VmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAg
ICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+
OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAg
ICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAg
ICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07
CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3Vt
ZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNp
emVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXgg
PiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlw
ZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3Vs
dDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAg
cmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0T2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0T2JqZWN0LmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxODc2ICsyNSwy
NSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1l
bnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBj
bGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5n
ZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlv
bmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBs
ZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsK
LQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRy
dWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwg
ZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50
YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25n
PEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFu
eT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJl
dHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJz
aW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmpl
Y3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVk
Ci0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5
cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3Rh
dGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxs
YWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhh
bmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFs
dWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmpl
Y3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0
ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xl
YW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZh
bHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZm
ZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0Lgot
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBl
ZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5U
eXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVm
KGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9y
UmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJu
IHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0
ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5
dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hv
cnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0
aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51
bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGlj
IHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
c2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUlu
dDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQg
dHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1i
ZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
Ci0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJl
ciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjpp
c2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIo
JnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0
cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJs
ZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVt
YmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91
YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBp
bmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBk
b3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91
YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0
aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
JiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFj
aEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3Rh
dGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVj
aWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkg
aW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRv
IGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJs
b2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4g
RXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZh
bHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
LQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3Qp
OwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRv
clByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRp
b24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlw
ZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRl
eFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3Bl
LCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgo
JnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAg
dXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBl
PjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAg
IGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93Pwot
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5k
ZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpD
b250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFs
dWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5n
ZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25n
Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3Vi
bGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlz
dC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAg
cmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3Qs
IGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAg
IGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAg
ICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmds
b2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9y
RnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
UmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRl
bXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50
aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJU
b0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0g
ICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0K
LSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46Oklt
cGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVt
ZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9m
IHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3Ig
TnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYg
VHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAot
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMg
YmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAg
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVu
dW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMg
aW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAg
ICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAg
ICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAg
Ym9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
JnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5v
dCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFi
bGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAg
ICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9y
LnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElE
TCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFp
bDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAg
ICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAg
ICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
IC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUg
b2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxW
Pjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFs
dWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBw
ZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUu
IE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZh
bHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFs
dWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4g
cmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQ
cm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5n
IChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFp
ciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQg
dG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBp
cyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8g
YW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVz
VmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAg
ICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVl
UGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRl
RGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBj
cmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4g
QXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0
ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJh
dGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51
bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAg
IHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJh
dGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3Qo
dmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKICAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVj
dCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
LSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAg
dXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNl
PgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250
ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5
cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5
cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6
OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBu
dW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9
IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1l
cmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmlu
Z1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMg
IT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
c2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJh
eVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBE
aWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlv
bmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
RGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFy
eSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
RGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5n
IERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhh
c0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29y
ZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBy
ZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVj
b3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZh
Y2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJp
Z2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxh
YmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5k
Ojphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1
ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExO
dWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQg
bWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBp
cyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMu
IElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25h
cnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGlj
dGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVj
b3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlw
ZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBv
YmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRl
cmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewot
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAg
ICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5
cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5
cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlw
ZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJh
d1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+
OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3Jh
cHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2Fz
dGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25U
eXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZh
bHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBv
ZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBv
cHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlz
IGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1l
dGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBS
ZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMu
IElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGlu
ZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3Ip
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VU
eXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFy
cmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVy
ZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0
IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0
aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAo
aGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxp
c3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6
dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51
bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBi
b29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJu
VHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4u
PjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNp
bmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDww
PiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJp
YW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJy
aWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAg
IHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5
cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERh
dGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0
Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNP
TiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXpl
KHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0
cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAg
ewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsK
LQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBm
YWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJl
dHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5T
UmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZl
cjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3Jh
cHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBw
ZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0
b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0
KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJL
ZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFs
dWUpIH07CiAgICAgfQogfTsKIAotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBv
cnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZh
cmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8
SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQot
ICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJh
c2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0
aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUg
VmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250
YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAg
ICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29u
dGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBl
Pjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVu
dENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7
IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZl
cnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBz
dGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFp
bDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJl
c3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkocmV2aXNpb24gMjExNTQ4
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IElt
cGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitl
bnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3Jj
ZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9u
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6
b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBl
eHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
K3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09i
amVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9t
IEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVk
IGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1
ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZh
bHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnRO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
T3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkp
KSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
QW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUu
Z2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQor
CituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9u
VHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8
SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55
Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90
IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJm
b3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hv
c2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBh
bm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURM
IG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9U
RTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBU
PyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2lu
ZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6
aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Cisg
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Qm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9v
bCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xl
YW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4g
eworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJh
eUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBv
cnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsK
KyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFj
ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9X
cmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJl
dHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFt
ZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRy
T3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4g
Y29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyBy
ZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0
Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQx
NkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1w
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
aG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAg
IHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50
MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBz
dGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2
NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBw
b2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91Ymxl
IG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUg
bnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051
bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
ZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0K
KworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0
ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJ
RExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkK
KyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0s
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8v
IFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
b25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9u
Zy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4g
b3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtl
cyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9i
amVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4
Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhp
bmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5k
ZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdl
dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50
MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8
IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJs
ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
c2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJ
bmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAg
ICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZl
cnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAg
ICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAg
ICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAg
ICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhy
b3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlND
OjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlND
OjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRl
eFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
KworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAg
ICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9i
amVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAg
ICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsK
KyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRy
LCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
KyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAg
ICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBW
Pjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFu
Y2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5l
ZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAz
LiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Cisg
ICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQg
a2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5
TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAg
ICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yg
a2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAg
ICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4K
KyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAg
ICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3Ip
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2Mg
aXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51
bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Cisg
ICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2Ny
aXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8g
YW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0g
RGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisg
ICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAg
ICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2
YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVy
dGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0
cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5
cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlw
ZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJl
dHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxL
LCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9i
amVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1h
cHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFs
dWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZl
cnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBz
dGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAg
ICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBM
ZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAg
ICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5
VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBD
cmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBi
b29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAv
LyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVz
dWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERp
Y3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVu
dW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7
CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09i
amVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7Cisg
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENv
bmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBl
bmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+
IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9Owor
CituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNv
bmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAg
ICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9u
dDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29u
ZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBj
b25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsK
KyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0
eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
TnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBO
dW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51
bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNr
IGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6
XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVz
aW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJP
ZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBj
YW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+Owor
CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5
cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0g
MDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFy
eVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwor
ICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBo
YXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBl
ID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51
bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAg
dXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5j
bHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxU
eXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2Fu
ZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0
aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8g
Tk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAor
ICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlm
IChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAg
ICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlz
IGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAg
IC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAg
ICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAg
ICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+
Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJu
VmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4o
WyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5
cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAg
ICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAg
ICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0
ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKElt
cGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShy
ZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYg
aXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlND
OjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2Vs
bC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0
IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVu
OgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJl
c3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1
bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVl
bmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNl
VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0
aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Cisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0
IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFy
cmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1l
dGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29u
dmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5
cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmICho
YXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
UmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBj
YWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQg
c3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVk
ZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9v
bGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
Ym9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVh
bi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8
VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsK
KyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwg
aGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVu
OgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBl
LgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8
TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsK
KyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5
cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAg
ICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJ
RExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2lu
ZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVu
dGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2Ug
PSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJp
YW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsK
KyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9w
dGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9l
YWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6
dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
dG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6
Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52
YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUo
JnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
SlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJp
bmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRy
PFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xv
YmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBh
dXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVu
dFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5l
cjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlw
ZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2Vi
R0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9y
dCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJ
dGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisg
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGlj
Q29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBW
YXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRh
aW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAg
ICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250
YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
c2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50
Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsg
MCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVy
dGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVz
dWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRSZWNvcmQuaAkocmV2aXNpb24gMjExNTQ4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDExOTIgKzI1LDM4IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgog
I2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVk
ZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3Ry
dWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20gSlNW
YWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3Jt
YWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRo
cm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkg
Y29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewot
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZl
cnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxV
PiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5
IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUg
PSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJs
b2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9h
ZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZl
cnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFz
RXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYg
dmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAg
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRv
SlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0g
ICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxh
YmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsK
LSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJu
VHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6
TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBl
KFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMg
YmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0
cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8v
IHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1
cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwot
ICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3
aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxh
YmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwg
dHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7
Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6
Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRy
X3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAg
c3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0
LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7
Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsK
LQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFy
cmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4g
ewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6Okdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZh
bHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0
aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0K
LX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHAp
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsg
fQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8
VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2Vy
IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0
YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0
dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0lu
dDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNo
b3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExv
bmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
PiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGlj
IGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRp
YyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZs
b2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAg
ICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlu
bGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0
YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVt
YmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6
OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
ewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJl
cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVh
dE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmlu
Zz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYg
KGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0
cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0g
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9i
amVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ry
b25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8
dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCog
anNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAg
ICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpT
Qzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMg
YW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBl
cywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0g
ICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3Vt
ZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2Vx
dWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBK
U0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2Jq
ZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6
YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCkt
PmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
LQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAg
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRo
ZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5k
ZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjpp
c25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0
KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+
IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExv
bmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OworbmFtZXNwYWNlIERldGFpbCB7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwordGVtcGxhdGU8dHlwZW5hbWUg
SURMU3RyaW5nVHlwZT4KK3N0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQordGVt
cGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCiAgICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAg
IGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CiAgICAgfQog
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJh
eTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQordGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3Rh
dGUsIGlkZW50aWZpZXIpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9y
PFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQordGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCiAg
ICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8
VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0g
SlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7
Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJh
eSk7CisgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZp
ZXIpOwogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5h
bWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0g
ICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZp
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRl
LCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9V
U1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8
SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKQEAgLTEzMTcsNTg0
ICsxNjMsNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgCiAgICAg
fQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25h
cnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlv
bmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7
Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlv
bigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxi
YWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGlu
dGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmpl
Y3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0
ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
VW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBi
b29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVy
blR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlw
ZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBU
LCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZy
b250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9u
YWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6
OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNp
bmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9v
bCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpD
b25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsK
LSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1
c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVt
YmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZO
dW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVy
aWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElE
TFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1l
cmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5n
IFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vf
b2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVy
T2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBT
ZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNl
PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1
ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxT
ZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2lu
ZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZy
b3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0
Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0g
MCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
RnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJy
YXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZy
b3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlv
bi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1i
ZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQot
ICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0g
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNv
cmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1i
ZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJl
Y29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAx
LiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVs
bCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6
aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051
bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1
bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUt
ZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRl
ZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5
cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25h
cnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9u
YXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNv
cmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1w
bGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRv
IHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVj
dCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBv
YmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmpl
Y3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lE
TEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRp
b25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9l
YWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1v
dmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAg
ICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBl
OjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAg
ICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1
cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0g
ICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4K
LQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAg
ICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwot
ICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5n
IGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0
aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
MS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2Qp
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5k
ZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9k
LiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNl
VHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0
ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96
ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBM
ZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmlu
ZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9k
LgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUg
PSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJ
dGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJy
YXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVz
IGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUu
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9u
YXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxi
YWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFs
dWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEy
LjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29s
ZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4s
IGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYg
aXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVy
aWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAg
ICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNO
dW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5n
VHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0
eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVF
cnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElE
TFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxp
c3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6
cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1
ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlv
blR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRl
eCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsK
LSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewot
ICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8
ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09
IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3Rh
dGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAg
ICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxU
Pj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+
ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRo
aXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlz
dGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAK
LSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBh
dGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAg
ICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsK
LSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3Jh
cHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElE
QktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
V2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUo
c3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2lu
ZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1
Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2lu
ZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAg
dXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRl
bTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0
cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAg
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFy
aWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3Qg
bGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVu
Z3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1l
IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFs
dWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVy
biB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U2VxdWVuY2Vz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
U2VxdWVuY2VzLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0U2VxdWVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2Uu
aCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMu
aCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xh
c3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lk
IG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
LCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29k
ZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
Y29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBT
cGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNp
b24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
VCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVl
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7
CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24g
Y29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRF
bnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUm
JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYg
KFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNl
cHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4o
c3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51
bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50
ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAg
ICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lv
biB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVp
bmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxs
YmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2Jq
ZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8g
dmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAg
IC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVu
IHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBP
dGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVs
ZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29u
ZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRp
b24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlw
ZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVl
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVs
bD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50
b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisv
LyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3Mg
PSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpT
Qzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZl
clZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3
PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRh
cHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNp
bmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46
OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJU
eXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3Qp
KQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJu
IGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdl
dFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYg
cCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBn
ZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRl
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAg
IHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgor
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0
aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9V
SW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAg
c3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExv
bmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4g
dmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
KworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAg
c3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91
YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVt
YmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJl
cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2Fk
IGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGlt
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91
YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9C
eXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRv
VVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVj
dCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtl
IHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
PjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBq
c09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29u
dmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJp
YyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJ
RExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQg
Zm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3Bl
LCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBH
ZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJu
VHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlm
ICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpK
U0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFh
cnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9i
c2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1No
YXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3Vv
dXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlND
OjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1
ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRl
ciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0Fy
cmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9i
amVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
KworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVk
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUs
IGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7
CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7
CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7Cisg
ICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVj
LCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAg
eworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlND
Ojpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Cisg
ICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNw
YWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlk
ZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElk
ZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0
cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAg
ICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVz
aW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAg
ICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4K
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0
LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9i
amVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJl
c3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlL
ZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBS
ZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBi
ZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9y
ID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0
b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2Mu
W1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlz
IHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24g
bW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExl
dCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisg
ICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRl
cjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2
YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVl
IGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAg
ICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3Vi
VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMg
YWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAg
ICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkg
b2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRv
IHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAg
IHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAg
YXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAg
ICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAg
ICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1
ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdl
IG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEg
SlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0
b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAg
ICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwg
ZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5r
ZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRy
dWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5p
c0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIg
PSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmds
b2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVt
cGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBD
b25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0g
YnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExp
c3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAg
ICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBE
ZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9u
PFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFs
dWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJl
ck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZy
b250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisg
ICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6
aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAg
IHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
U2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1
ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJl
ck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25h
bEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKwor
ICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBG
cm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6
Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlw
ZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25h
cnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlw
ZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5
cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5
cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2
YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlw
ZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
KyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51
bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Owor
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgor
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBp
ZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMg
b2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRv
IGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFz
UmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9u
YXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
ZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhh
c0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoK
KyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRo
YXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVk
ZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxp
c3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2Fu
ZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAg
ICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBX
VEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAg
ICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVu
YW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFz
czsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9X
cmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFs
dWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMg
NSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhl
bjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXND
ZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBm
b2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRo
ZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRl
cmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0
KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlz
IG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
U2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVl
bmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRv
cikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0
aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90
IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFy
cmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNG
cm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25h
cnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhh
c0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0
eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5
cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5k
IHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURM
Qm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlw
ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAx
My4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9
IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5
cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJp
bmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0
eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBl
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVt
ZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8g
MTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93
IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxi
cmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlw
ZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxl
bWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJp
YW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVy
blZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0
eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJl
ZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6
dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3Qs
IEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUp
OworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/
IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2
YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAg
aWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
CisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxF
KFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRv
SlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlm
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVy
dGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAg
ICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAg
ICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9
IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1
Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewor
ICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5
cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAg
ICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsK
KyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAg
IH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0
YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0Fy
Z3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5k
ZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAg
dHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJl
c3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydElu
ZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
U2VxdWVuY2VzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0U2VxdWVuY2VzLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxODc2ICsyNSwyOTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3Vy
Y2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlw
ZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTT05PYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJz
aW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
fTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9y
KCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYs
IEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERp
Y3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXpl
ZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewot
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19
Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lv
bi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
IG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZ
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4g
OiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6
OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5n
ZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IE51bGxhYmxlIHR5cGUKLQogbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElE
TFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAv
LyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJ
REwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWdu
ZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5j
dGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxs
XSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVs
bC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAg
Ly8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0
aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2Us
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRo
ZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURM
TnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAg
IHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
c3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29s
ZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4o
JnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
b29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1
ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlC
dWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsK
LSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0K
LS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJl
ZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVy
ZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJD
bGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2Jq
ZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVm
KGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJl
Zihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9y
dD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
U2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50
MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7
Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQz
MigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
ewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0
YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVt
YmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0g
ICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAg
IH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAg
ICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5p
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRp
YVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7
Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
YmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkg
fTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwg
WyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFs
dWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGlu
Z1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUg
bnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUg
YXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29u
dmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQot
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjpp
c0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xv
YmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsK
LQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNo
YXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMy
KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91
YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVj
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFz
QXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5p
c0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUg
cmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5
LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxP
YmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJl
dHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0
ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBL
ZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVl
VHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CitzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47
CiAKLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKICAgICB7Ci0gICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkg
aW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVu
ZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAg
ICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7Ci0gICAgCiAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0
LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlBy
b3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3Mp
OwotICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtl
eXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBr
ZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMp
IHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0o
a2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0g
ICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5
RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2Ny
aXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElm
IGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBm
b3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZh
dWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAo
IWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJs
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0
ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVk
S2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkp
OwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0g
ICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsK
LSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
ICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFu
IElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0g
Q29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwg
c2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRo
aXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRL
ZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtl
eSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmb3JF
YWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgICAgICAvLyA2LiBS
ZXR1cm4gcmVzdWx0LgorICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAg
fSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworLy8gU3BlY2lhbGl6YXRp
b24gZm9yIG51bWVyaWMgdHlwZXMKKy8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQg
Zm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorLy8gc3Vw
cG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKy8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29w
ZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
c3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgdXNpbmcgR2VuZXJpY0NvbnZl
cnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBP
YmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBl
YXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29u
c3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNL
ZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAg
Ly8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRv
IGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAg
ICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGds
b2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0
IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSku
Ci0gICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAgICAg
ICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
CisgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gMy4gUmV0dXJuIHJl
c3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
aWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBF
bnVtZXJhdGlvbiB0eXBlCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOworICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OworICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVj
dCk7CisgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
cnJheS0+bGVuZ3RoKCk7CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKKyAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJv
dz8KKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFj
ayBmdW5jdGlvbiB0eXBlCisgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9
IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0g
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwogCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShK
U0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZh
Y2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVk
Pgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAg
ICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
VCwgdHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7
Ci0gICAgfQotfTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdElu
ZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9OwogCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAg
ICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+
Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAg
IHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxz
ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9u
dCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0
eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVz
ID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
bnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAh
PSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVt
ZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJp
bmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5
cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVz
ICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJy
YXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcg
RGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rp
b25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25h
cnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2lu
ZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBo
YXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNv
cmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBl
cyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
cmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJl
Y29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBl
PjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9m
U2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlv
bmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJm
YWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJy
aWdhbmQ6Ol8xPj47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyIHsKKyAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFR5cGU+OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwogCiAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFu
ZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwu
Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVM
aXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAg
IGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVs
bFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBl
cyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQg
dG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBo
YXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwg
aGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29y
ZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dTZXF1ZW5j
ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0g
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0
IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRv
IHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6
OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RG
OjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAg
ICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7
Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3Jh
cHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVl
KSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7CisgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkK
KyAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwogCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorICAgICAgICBK
U0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgIGlmICgh
YXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25P
YnNlcnZhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKIAotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBv
YmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBp
ZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9
IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRp
bWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAgICAg
ICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFu
IG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhv
ZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1
cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElm
IG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBh
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBl
IGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJl
dHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBl
LCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYs
IEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklm
QWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0
aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBl
IGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBS
ZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5
VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMu
IElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5
VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25h
cnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBy
ZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNS
ZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFj
ZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGlu
dGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYu
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKIAot
ICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9v
bGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkg
ewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4g
SWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
TnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7
Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUs
IGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9
IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJp
YyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9v
bGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4K
LSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsK
LSAgICB9Ci19OwogCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAg
dXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBs
ZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1
ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0
aW9uVHlwZT46OnZhbHVlPjsKKyAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRp
Z3VvdXNTaGFwZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRp
b25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlND
OjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVu
Y2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdU
Rjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAg
ICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdh
bmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFs
dWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNT
RVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAg
ICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwogCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiB9
OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKK3RlbXBsYXRlPD4KK3N0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKK3RlbXBsYXRlPD4K
K3N0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5U
eXBlOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSB0eXBlCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAg
ICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBUOjpj
cmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKICAgICB9
CiB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7
CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1
cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlND
Ojpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQot
Ly8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQordGVtcGxhdGU8Pgorc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
Pjo6UmV0dXJuVHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAg
ICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwg
Y3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBs
aXN0ZW5lcjsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotLy8g
TUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKK30KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBl
ID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
U2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0Owor
ICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewogICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewotICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAg
IHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0
LCBsaXN0KTsKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlw
ZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExG
cm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKICAgICB9CiB9OwogCi0jaWYg
RU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCiAgICAgewotICAgICAg
ICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVj
LCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKICAg
ICB9CiB9OwogCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFy
aWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRl
cmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVt
PigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVy
QmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZl
Y3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVf
dCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFy
Z3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQg
Y29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0
YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsK
LSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpu
dWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5
cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRp
Y0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1l
bnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3Rk
OjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFs
dWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9Owot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291
cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5
cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVt
IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxB
c0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVk
IGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwor
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252
ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNW
YWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0
aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0
ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorewor
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
PFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVy
c2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElE
TEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7
CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZl
cnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBW
IGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUg
Y2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5v
bk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAg
IC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4K
KyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwg
dGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8g
My4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhl
IHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9
IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsK
KworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0Lgor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlC
dWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
VmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+Owor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2Jq
ZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
JiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8
VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUg
VCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMg
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Qnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsK
KyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9j
dGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
c2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAg
c3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVy
biB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9u
Zzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0
PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
CisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewor
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBu
dW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91
YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVy
bG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRp
YVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50
b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlw
ZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFs
dWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNP
YmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJyYXkt
bGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0
ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51
bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0
aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBw
b3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dT
Y29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNp
bmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJl
dHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAg
ICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlm
ICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmRO
b25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6
OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhp
bmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250
aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4
VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91Ymxl
VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252
ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6Omlz
SlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9i
YWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRl
LCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3Ro
KCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwor
CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVm
aW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0
YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5k
ZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5U
eXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAg
eworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0
cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQor
ICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pT
PFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9
IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3Qp
OworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJy
YXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisKK25h
bWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Cisg
ICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZp
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRl
LCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9V
U1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8
SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7
CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAg
ICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8g
MS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisg
ICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1
bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9i
amVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3Bl
cnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpT
Qzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8g
NS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Cisg
ICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0IGRl
c2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3Jp
cHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNj
cmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBk
ZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBv
ciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0
aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZp
bmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAx
LiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBL
LgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252
ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAyLiBM
ZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRW
YWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAg
ICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUs
IHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5
IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUu
CisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHBy
b3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVu
ZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFt
ZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBU
eXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkK
KyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8g
MS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4g
RDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAg
ICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQg
dmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBh
cyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5v
dCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNv
bnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1ZhbHVl
ID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisg
ICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1
bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBh
aXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBp
cyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlv
biB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFs
dWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9i
amVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSks
ICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0
eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5
cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBD
b25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1
Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlw
ZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAgIHsK
KyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5h
bWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExV
bmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0
OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBu
dW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+
LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBz
dGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5
cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09
IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJp
bmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisK
KyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6
dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2Ug
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5B
cnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0
LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmln
YW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFy
eVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25h
cnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25h
cnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwg
bnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29y
ZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
KyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+
PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUg
YW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVs
bC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlw
ZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAg
ICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNO
dWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5
cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3Rl
ZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMg
bnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8
IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGlj
dGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5
cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBl
LCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVj
b3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRo
ZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlw
ZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEg
cmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGlu
Y2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5
cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJy
aWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7
CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0
eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBl
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVy
Q2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6
OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3Rl
ZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0
ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3Qs
IHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVl
LmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0
aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBv
ZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVj
dC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBA
QGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFi
cnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhv
ZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20g
ViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5
cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNT
ZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRl
cmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0
KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlz
IG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20g
ViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96
ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5U
eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwg
aGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0
aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBl
LCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNv
cmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFj
ZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0
IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1l
PElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9vbGVh
blR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1
ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVy
aWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEg
c3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6
OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3RyaW5n
VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmlu
Z1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051
bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhh
c051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAg
IC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFuVHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5U
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3LiBU
aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNp
bmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUg
VHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVu
Y2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlv
blR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJ
bXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4ID0g
dmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiBy
ZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRv
JiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZB
bmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYg
KEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVM
aXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAw
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0
VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBU
OjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051
bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0
ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVh
dGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAg
ICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJl
ZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUg
b2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lmIEVO
QUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisKKyNl
bmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNv
bnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2Ugewor
ICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewor
ICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiByZXN1
bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+
IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJ
RExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+Owor
CisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5k
ZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOworICAg
ICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1l
IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFk
aWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sK
KyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChzdGFy
dEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKwor
ICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5l
ciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3Rh
cnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsg
KytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsK
KyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0K
KworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lv
biAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcwOSArMjUsMTEgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJ
REJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5j
bHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50
YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xh
c3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2Us
IENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9y
bWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25h
bDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVt
ZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBm
b3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVl
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZh
bHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3Jl
YXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENv
bnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVz
cGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+
IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1
cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lv
blR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0
LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAot
ICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBl
IGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRl
ZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFi
bGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5k
bGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVl
IG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxl
bWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVy
PFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
VDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZh
dWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFu
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3Jh
cHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVy
VmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlND
OjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVm
UHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRS
ZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlw
ZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihj
b25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9j
YXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJl
Zihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBw
LmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+
IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGlj
IGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1i
ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50
b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNp
Z25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50
NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2
NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5
cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRp
YyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUg
bnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAg
c3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQot
ICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
ICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAm
JiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
ICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJ
bkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRl
LCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lh
bGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGlt
cGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBh
ZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9h
ZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4
ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
IHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsK
LSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9u
IHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhW
YWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwg
ZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZz
dGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVz
aW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47
Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBK
U0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBp
ZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5k
Tm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4
aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29u
dGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVl
ID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0
RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBs
aXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBs
aXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAg
ICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9i
YWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZy
ZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJl
Y29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1w
bGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50
aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlm
aWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9C
eXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAg
ICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0g
ICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiBy
ZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51
bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJl
ID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJy
YXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9i
amVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGlu
IExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAg
ICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAg
ICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJv
b2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZz
dGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3Qg
dW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxl
IC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAg
ICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwg
dmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6
OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAg
ICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9m
IHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46
OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVl
IHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVu
IHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFu
ZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBP
dGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1
ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVl
IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJl
c3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJv
dG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0
YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAo
a2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIg
OiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRv
IGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMg
bm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFu
IElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1Zh
bHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAg
ICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBh
aXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURh
dGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3Jl
YXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFz
c2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
LCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
ZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRp
b24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBz
dGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRp
b25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBD
YWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25U
aHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZh
bHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjph
c09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9u
YWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJu
VHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVz
cGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9u
PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAg
ICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3Qs
IGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25h
bEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlv
bj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVz
aW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1l
IFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51
bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmlj
VHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5
cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElE
TEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5k
OjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3Ry
aW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5n
VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1
ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNl
VHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVu
Y2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5p
b24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96
ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1
c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
RGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAg
fHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGlj
dGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAg
IHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxp
c3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29y
ZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNp
bmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29y
ZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZE
aWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJ
bnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZh
Y2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBh
IG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBi
cmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+
Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0
dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBV
bmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAg
IC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAo
aGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVj
b3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0
Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBh
biBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAg
IDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAo
YnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1
ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsK
LSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0
byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBl
KT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVz
aW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVz
aW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJh
d1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVl
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlm
ICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50
YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
aWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZh
bHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkg
a2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAg
ICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZh
bHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9m
IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
cmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2Yg
dGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAh
PSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRl
cmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2Vx
dWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0
TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIu
IFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
My4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0
aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2Yg
dGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0
ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZy
b3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNE
aWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5j
bHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29y
ZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRU
eXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNr
IGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEy
LjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmpl
Y3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUg
b2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZh
bHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAg
ICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4o
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29s
ZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5
cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5n
VHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAg
ICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmlu
Z1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0K
LSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAg
ICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
TnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlm
IChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xl
YW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0g
ICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQu
Li4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVM
aXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdh
bmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6
ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAg
ICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2Vx
dWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1l
IFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwot
ICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJy
aWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6
dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
QVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4g
ewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
YXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91Ymxl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgm
c3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05Q
YXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewogICAgIHN0YXRpYyBSZWZQdHI8VD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7CkBA
IC0xNzQ1LDE1NiArNDcsNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVu
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRl
KHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAg
ICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQ
dHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9i
amVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFC
TEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0jZW5k
aWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252
ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAg
ICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0
ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7
Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURM
VHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQot
ICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4
OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAg
ICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGlj
QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0g
ICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJ
bmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07Ci0KLSAg
ICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIg
cmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0
SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsr
aSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgICAg
ICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Ci0g
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6MjExNTQ4KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0ODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAx
MyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Cit9
CisKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVlIGpzU3Ry
aW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAg
aWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcg
c3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRp
bjEoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJpbmcgaWRl
bnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZp
ZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUs
IFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0
cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNj
b3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5wYWly
ZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZvciA4
LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAgaWYgKHN0
cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0byBjb2Rl
UG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NVUlJPR0FU
RShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmcoU3Ry
aW5nJiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhl
cmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJlZFN1cnJv
Z2F0ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xvdyBwYXRo
OiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQorICAg
IC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgY2hh
cmFjdGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2Fw
YWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsK
KyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAg
aWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5z
dHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsK
K30KKworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKworSlNWYWx1
ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIERh
dGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkp
CisgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUuaW5oZXJp
dHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJl
cigpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxs
VHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRo
b2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
U3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUg
Y2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworCisg
ICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgY29uc3Qg
aW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qga01p
bkludDMyID0gLWtNYXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQz
MiA9IDB4ZmZmZmZmZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4
MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3Rs
eSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VFcnJv
clN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAgcmV0
dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0
KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmlu
Z0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQo
bWF4KSwgIl0iKTsKK30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5p
bXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1bmMo
eCk7CisgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4
aW11bSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVtcGxh
dGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBp
bnQ4X3QgbWluVmFsdWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUg
PSAxMjc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAv
LyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7
CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHNo
b3J0IG1pblZhbHVlID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9
IDMyNzY3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2
OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2
X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4x
NgorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVy
SW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFs
dWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKwor
ICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBh
dGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhl
IHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJf
dCBkID0gdmFsdWUuYXNJbnQzMigpOworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWlu
VmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0
OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1
ZTsKKyAgICAgICAgfQorICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUg
PyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBM
aW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBU
bzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgp
IHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJz
KHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1i
ZXJPZlZhbHVlcyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0
OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJT
aG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAg
dHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBp
ZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSBy
aWdodCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJf
dCBkID0gdmFsdWUuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihk
KTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDog
Y2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6Omlz
aW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9v
cihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihm
bW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9JbnQ4
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFt
cChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRv
U21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50
OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXAp
OworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhfdCB0
b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9T
bWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
b2N0ZXQKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50MTZF
bmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0
b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50
PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25l
ZC1zaG9ydAordWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5J
bnQzMiwga01heEludDMyKTsKK30KKworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAg
ICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJf
dD4oeCk7Cit9CisKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlLmFzVUludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7
Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwor
dWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAg
ICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1
cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRfdCB0
b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJh
bmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3VpbnQ2
NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5m
b3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0b0lu
dDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4
KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRv
dWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90
IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6
Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVy
dCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwor
ICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90IHRv
VUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmlu
aXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJuIG47
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
U3RyaW5ncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0U3RyaW5ncy5jcHAJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCwxNiArMjAsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRTdHJpbmdzLmgiCiAKLSNpbmNsdWRl
ICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNsdWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVy
dC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8c3RkYXJn
Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1
ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKQEAgLTM3LDI1ICszMCw2IEBAIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBhZGRJbXB1
cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBjb21t
b25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLUpTVmFsdWUganNP
d25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKLXsKLSAg
ICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVybiBq
c093bmVkU3RyaW5nKGV4ZWMsIHMpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhD
YWNoZShleGVjLCBzKTsKLX0KLQogc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9CeXRlU3Ry
aW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIFN0cmluZyYmIHN0
cmluZykKIHsKICAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRpbjEoKSkgewpAQCAtNzEs
NyArNDUsNyBAQCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmCiAgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICBh
dXRvIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7CiAgICAgcmV0dXJuIHN0cmluZ1RvQnl0
ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7CiB9CiAKQEAgLTgwLDcgKzU0
LDcgQEAgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdAogICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogCi0gICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAg
YXV0byBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CiAKICAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0
YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKQEAgLTEyMCw3ICs5NCw3IEBAIHN0YXRpYyBp
bmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFMKIAogU3RyaW5nIGlkZW50aWZpZXJUb1VT
VlN0cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAg
IFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIGF1dG8gc3RyaW5nID0g
aWRlbnRpZmllci5zdHJpbmcoKTsKICAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92
ZShzdHJpbmcpKTsKIH0KIApAQCAtMTI5LDM1NCArMTAzLDEwIEBAIFN0cmluZyB2YWx1ZVRvVVNW
U3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBzdHJpbmcg
PSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIGF1dG8gc3RyaW5nID0gdmFsdWUudG9X
VEZTdHJpbmcoJnN0YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwog
CiAgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7CiB9CiAKLUpT
VmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQotewotICAgIHJldHVy
biBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUgdmFsdWVUb0RhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAgICBpZiAoIXZhbHVlLmlu
aGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxO
dW1iZXIoKTsKLX0KLQotYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAg
Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0
TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxk
IGJlIGNhbGxhYmxlIikpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsK
LQotICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKLX0KLQotc3RhdGljIGNv
bnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZmZjsKLXN0YXRpYyBjb25zdCBpbnQzMl90
IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOwotc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhV
SW50MzIgPSAweGZmZmZmZmZmVTsKLXN0YXRpYyBjb25zdCBpbnQ2NF90IGtKU01heEludGVnZXIg
PSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4
YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0LgotCi1zdGF0aWMgU3RyaW5nIHJhbmdl
RXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUgbWluLCBkb3VibGUgbWF4KQotewotICAg
IHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNj
cmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVyVG9T
dHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2Ny
aXB0KG1heCksICJdIik7Ci19Ci0KLXN0YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91YmxlIG1heGltdW0pCi17Ci0g
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7Ci0g
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwg
bWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgeCA9IHRy
dW5jKHgpOwotICAgIGlmICh4IDwgbWluaW11bSB8fCB4ID4gbWF4aW11bSkgewotICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0s
IG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiB4OwotfQot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzIHsKLX07Ci0KLXRl
bXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29u
c3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKLSAgICBzdGF0aWMgY29uc3QgaW50OF90IG1heFZh
bHVlID0gMTI3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1
NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWludDhf
dD4gewotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1heFZhbHVlID0gMjU1OwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Ci19OwotCi10ZW1w
bGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50MTZfdD4gewotICAgIHN0YXRpYyBjb25z
dCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKLSAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFs
dWUgPSAzMjc2NzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2
NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVp
bnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1heFZhbHVlID0gNjU1
MzU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8v
IDJeMTYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRvU21h
bGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46
OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVzIik7
Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFz
dCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGlu
IHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgIGlu
dDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6
Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIGQgPCBMaW1pdHNU
cmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWluVmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4
VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1
ZXM7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkID4gTGltaXRzVHJhaXQ6Om1heFZh
bHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IGQpOwotICAgIH0KLQotICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0g
ICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0OjptaW5WYWx1
ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNs
YW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2lu
Zih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0geCA8IDAgPyAtZmxvb3Io
ZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICB4ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6
bnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNU
cmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogeCk7Ci19
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVl
LCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQot
ICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBh
dGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0
aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpIHsKLSAgICAgICAgdWlu
dDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChkIDw9IExpbWl0c1RyYWl0
OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oZCk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8g
MCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3Rk
Ojppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0geCA8IDAgPyAt
Zmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpKTsKLX0KLQotaW50OF90IHRv
SW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50OF90IHRvVUlu
dDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQ4X3QgdG9JbnQ4
Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8
dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCi1pbnQ4
X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotaW50MTZfdCB0b0lu
dDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZF
bmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkNsYW1w
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxl
ckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXApOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0K
LS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtc2hvcnQKLWludDE2X3QgdG9JbnQx
NihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxs
ZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5z
aWduZWQtc2hvcnQKLXVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKLWludDMyX3QgdG9JbnQzMkVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsK
LQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBr
TWluSW50MzIsIGtNYXhJbnQzMik7Ci19Ci0KLWludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPGlu
dDMyX3Q+KHgpOwotfQotCi11aW50MzJfdCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88dWludDMyX3Q+
KHgpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxv
bmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7Ci19Ci0KLWludDY0
X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9y
Y2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01heEludGVnZXIpOwotfQotCi11
aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJu
IGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLWludDY0X3Qg
dG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNu
YW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1h
eDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOwotfQotCi11aW50
NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0
ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4o
c3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50ZWdlcikpOwotfQotCi0vLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZwotaW50NjRfdCB0b0ludDY0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNv
bnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLS8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZy1sb25nCi11aW50NjRf
dCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1J
bmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5z
aWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVy
biBuOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgJKHJldmlzaW9uIDIxMTU0OCkJ
KGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5ncy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNH
bG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1w
bGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2Vu
dW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNl
UmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpT
T2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3Bl
Y2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24u
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9y
IElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpv
cHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4
cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9u
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0
aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20g
SW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQg
Y29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwg
VCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0
ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVl
LCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9h
ZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFs
c2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
bk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVl
LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
cmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5l
d2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExB
bnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5n
ZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisK
K25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25U
eXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAg
fTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJ
RExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+
OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxU
Pj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29u
dmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3Qg
T2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZv
cm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9z
ZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFu
bm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwg
bnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RF
OiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBp
cyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/
IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0
aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5n
IEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjpp
c051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNO
dWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4g
OiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExC
b29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29s
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVh
bih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRl
PD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7
CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5n
IFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5
QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBl
ID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9y
dC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+Owor
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRB
cnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNl
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dy
YXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0
dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIo
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1l
c3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJP
clJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBj
b25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQ
dHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJl
dHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
Uygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgor
ICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNo
b3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAg
c3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQz
MihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
c2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0
YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4g
dG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4g
dG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBv
aW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZh
dWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUg
bnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAg
IHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBu
dW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJl
cik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
cmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4g
OiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBk
b3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShu
dW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0
aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQor
CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3Rl
ZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmln
dXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0
eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVT
dHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0
aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVT
VlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpT
T2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElE
TFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQor
ICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZv
ckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwg
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
KnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8g
U3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBv
bmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25n
LiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBv
dmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2Vz
IGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAo
IXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVj
dCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2Jq
ZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRl
cmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0
dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhj
ZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGlu
Z1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQz
MigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwg
aW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFs
dWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91Ymxl
VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBz
Y29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdElu
ZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAg
ICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVy
dGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAg
ICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAg
ICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAg
ICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xG
YXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29u
dmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJv
dz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6
OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6
OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJh
eS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwor
CisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJl
dHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+
IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
RG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5j
ZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNl
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAg
IGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAg
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJy
YXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGlu
ZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAg
ICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwor
ICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIs
ICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1
Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewor
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
ZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4g
c3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50
aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlm
aWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4g
eworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAg
ICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0
IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8
SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5j
ZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVk
IG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMu
IElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAg
ICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBr
ZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlO
YW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAg
ICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlND
OjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBr
ZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAg
ICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgor
ICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAg
ICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBp
cyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVt
ZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAg
ICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3Jp
cHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBh
biBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBE
ZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAg
ICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAg
ICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAg
ICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZh
bHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0
ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRz
IHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4g
aGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlw
ZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBl
ZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0
dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEss
IFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2Jq
ZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFw
cGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1
ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVy
dGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0
ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAg
IC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExl
dCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAg
ICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlW
YWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENy
ZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJv
b2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21T
dHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8v
IDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChj
cmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1
bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGlj
dGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9i
amVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51
bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsK
KyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51
bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2Jq
ZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAg
ICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUo
SlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29u
c3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4g
eworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
UmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisK
K25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29u
ZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAg
IHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250
PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25k
aXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNv
bmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewor
ICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5
cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpz
aXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZO
dW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51
bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVt
ZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sg
Zm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpf
MT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9m
U3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNl
cXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcg
U2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisK
KyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlw
ZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9y
IDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAw
OworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5
VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5k
OjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Cisg
ICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhh
c1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUg
PSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1
c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJ
bnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNs
dWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0
dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5
cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5k
OjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRo
ZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBO
T1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisg
ICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYg
KGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAg
ICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAg
ICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAg
ICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMg
YSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAg
ICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAg
ICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+
Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5W
YWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0Pihb
Jl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlw
ZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRp
b25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAg
ICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAg
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3Rl
ZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1w
bGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
dHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBp
cyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7
CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6
OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxs
LT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAg
ICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQg
dGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVz
dWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVu
Y2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VU
eXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRo
b2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQg
b2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJy
YXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0
aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBS
ZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNh
bGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBz
dGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRl
cyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0
byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29s
ZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBi
b29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFu
LgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxU
eXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwor
ICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jv
b2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBo
YXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46
CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUu
CisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxO
dW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUp
IHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQu
IElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
U3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwor
ICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlw
ZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4s
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAg
ICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElE
TEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
aW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5n
IFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9
IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlh
bnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgewor
ICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0
aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5
cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0
eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0
b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpn
ZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAg
ICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZh
bHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExK
U09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmlu
Z2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9i
YWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50
TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1
dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50
V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVy
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29s
dmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwg
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzog
SURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJH
TEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0
IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVy
QmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJp
YWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0
ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlv
bmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWND
b252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZh
cmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFp
bmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAg
ICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRh
aW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46
OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBz
aXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRD
b3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAw
LCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0
ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3Rh
cnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6
OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
eyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1
bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgJKHJldmlzaW9uIDIxMTU0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTg3NiArMjUsODQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnZlcnRCYXNlLmgiCiAjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29u
dmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CiBlbnVtIGNsYXNzIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nIH07CiAKLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9pZCBvcGVy
YXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLSAg
ICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmpl
Y3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhj
ZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9y
IElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZl
cnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lh
bGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29u
dmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQogewogICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlv
blRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
LXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0v
LyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZl
cnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
Ym9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBF
eGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNl
cHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
LQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExB
bnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0g
SlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
QW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVD
b252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJs
ZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFj
ZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVy
ZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0g
ICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8g
YW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFz
c2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sg
ZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFz
TnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVl
IG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwot
ICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1
cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3
aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZv
ciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3Vy
YXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsK
LSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1l
IElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjpp
c051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsK
LSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
Qm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29s
ZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJy
YXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlND
OjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFy
cmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3
PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAg
ICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19
OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKK1dFQkNP
UkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb0J5
dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCiAvLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRl
cmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46
OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKy8vIE1BUks6IFN0
cmluZyB0eXBlcwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmlu
Zz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCiAgICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVy
VHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0
KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIG9iamVjdDsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgfQogfTsKIAotbmFtZXNwYWNlIERldGFpbCB7
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCog
cCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4o
cCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3Qg
UmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsg
fQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4g
ewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50
OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50
OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0
ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAg
ICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3Rh
dGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0
dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRv
VUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGlj
IGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1i
ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgICAgICBp
ZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXRO
dWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZh
bHVlKTsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25n
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwogCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CiAgICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgICAgIGlmIChj
b25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxB
c0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7
CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKIAotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgICAgIHJldHVybiBKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwogICAgIH0KIH07CiAKLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExv
bmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4g
dmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
LQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAg
c3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91
YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVt
YmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJl
cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2Fk
IGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGlt
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91
YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9C
eXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRv
VVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVj
dCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtl
IHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
PjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBq
c09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29u
dmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJp
YyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJ
RExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQg
Zm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3Bl
LCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBH
ZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlm
ICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpK
U0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFh
cnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9i
c2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29u
dmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJy
YXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAg
ICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5
cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1No
YXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3Vv
dXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlND
OjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1
ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRl
ciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0Fy
cmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9i
amVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
LQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVk
KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUs
IGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGlu
ZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7
Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0g
ICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVj
LCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0
QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlND
Ojpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0g
ICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNw
YWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlk
ZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElk
ZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0
cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVz
aW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAg
ICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0
LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9i
amVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJl
c3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlL
ZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQ
cm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0
eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBS
ZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAg
ICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBi
ZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5
RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9y
ID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0
b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAg
ICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2Mu
W1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklY
TUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlz
IHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24g
bW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQo
KSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExl
dCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0g
ICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRl
cjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2
YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBv
YmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVl
IGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAg
ICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3Vi
VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMg
YWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAg
ICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkg
b2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRv
IHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAg
IHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAg
YXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAg
ICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAg
ICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1
ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdl
IG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEg
SlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0
b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAg
ICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwg
ZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5r
ZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRy
dWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIg
PSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmds
b2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBD
b25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0g
YnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExp
c3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAg
ICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBE
ZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9u
PFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJl
ck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZy
b250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0g
ICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6
aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAg
IHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
U2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJl
ck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25h
bEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQot
ICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5
VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBG
cm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6
Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlw
ZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25h
cnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlw
ZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5
cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5
cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlw
ZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
KyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51
bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Owot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgot
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBp
ZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMg
b2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRv
IGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFz
UmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
IHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9u
YXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
ZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhh
c0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoK
LSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRo
YXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVk
ZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxp
c3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2Fu
ZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAg
ICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBX
VEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAg
ICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVu
YW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFz
czsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9X
cmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFs
dWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMg
NSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhl
bjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXND
ZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBm
b2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRo
ZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRl
cmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0
KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlz
IG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
U2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVl
bmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRv
cikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0
aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90
IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFu
ZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFy
cmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNG
cm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25h
cnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhh
c0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0
eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5
cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5k
IHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURM
Qm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAx
My4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9
IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5
cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJp
bmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0
eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVt
ZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8g
MTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93
IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxi
cmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlw
ZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxl
bWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJp
YW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVy
blZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0
eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJl
ZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6
dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3Qs
IEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUp
OwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/
IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2
YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAg
aWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxF
KFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRv
SlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlm
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVy
dGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAg
ICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
ICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9
IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1
Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewot
ICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5
cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAg
ICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsK
LSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAg
IH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0
YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0Fy
Z3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5k
ZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAg
dHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydElu
ZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRV
bmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFVuaW9uLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0VW5pb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgor
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENv
bnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0
cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3Bl
cmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisg
ICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4
Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNp
YWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNv
bnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4m
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKwor
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252
ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1l
cmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZh
bHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorewor
ICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChV
TkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
QW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZh
Y2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAor
ICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRv
IGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBh
c3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNr
IGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RB
c051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1
ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8K
KyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0
dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVy
d2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBm
b3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6
aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Cisg
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7
CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9v
bGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFy
cmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
Qzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpB
cnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRl
PD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmll
dz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Cisg
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Owor
fTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBl
ID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBX
cmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3Jh
cHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6
OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisg
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29u
c3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRy
T3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7
IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0
ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3Rh
dGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9V
SW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUlu
dDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNo
b3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1
aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQx
NihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5z
aWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUu
dG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5h
c0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisg
ICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0
aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+
IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7
CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9y
IE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUo
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVT
dHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZT
dHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAg
ICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZh
bHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlw
ZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
KyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+Owor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2Jq
ZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0
ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5
cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZs
b2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3Ig
bW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRv
dWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVy
aWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFK
U0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29u
dmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJy
YXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5
LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2
YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0
KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+
bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAg
aWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVN
YXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1No
YXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6Oklu
dDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFz
SW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlND
OjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0g
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93
U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXko
b2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpT
Qzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0
KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisg
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRy
eVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElz
IHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
YXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
KworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhW
YWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3Qg
U2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAg
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGds
b2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJh
eSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7Cisg
ICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVj
LCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2Ug
RGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRp
Zmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRp
ZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5n
KHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVz
aW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcg
VmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIExldCBy
ZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAv
LyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRo
cm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNd
XSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVh
dCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8g
Ty5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBv
YmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAg
ICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0Vu
dW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhp
cyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2Rl
PworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYm
IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5
cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAg
ICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+
Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVl
IGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUg
dmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAg
ICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1
ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJl
YWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmpl
Y3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVz
dWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgewor
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCBy
ZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRv
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAg
ICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAv
LyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgor
ICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVl
ZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1Zh
bHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQg
dG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8
Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAg
ICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tl
eSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSks
IGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4K
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0
aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERp
Y3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rp
b248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVu
Y3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExD
YWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFj
ayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJ
bnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFs
T2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUg
VCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVy
blR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9u
YWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmln
YW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
KyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAg
IHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3Qs
IGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFp
bDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4u
Lj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsK
KyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZO
dW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1
c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19i
YXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51
bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZy
b250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNp
bmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1
ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
U2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwor
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAg
dXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3pl
bkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5
cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0g
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47
CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVl
OworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9m
UmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0g
bnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRp
b25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVy
T2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
Ly8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlz
IG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBz
dGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmICho
YXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0
aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUg
cHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3Ig
dW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNv
cmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0
aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGlj
dGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVj
b3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
cmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBW
IGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBv
YmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwg
SXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpm
b3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAg
ICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUg
VHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwor
CisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBw
ZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkp
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0g
MTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgor
ICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxv
d2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZh
Y3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRv
cikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0
aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90
IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1l
dGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1
ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBo
YXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEg
ZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
MS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2Qp
LgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5k
ZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1l
dGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlU
eXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3pl
bkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0
eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGlj
dGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUu
CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBj
YWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURM
IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3Rl
cCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8g
ICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
Qm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29s
ZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7
CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJ
ZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNO
dW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsK
KyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNO
dW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwg
aGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUu
CisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0
cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBl
cyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmlj
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBU
eXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUg
PSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5
cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdh
bmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6
dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50
YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQu
aW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFs
dWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUp
IHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJl
bmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1
ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExK
U09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVk
U2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFs
dWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFs
dWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVl
LCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAo
IWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47
CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9
IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChV
TkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VC
R0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1Zh
bHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9u
cworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAg
dXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1
bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAg
dXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBW
YXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAg
ICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46
Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAg
ICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsK
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6
OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1l
bnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6
ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+
IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBl
bmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgp
OworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dFVuaW9uLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFVuaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE0MTUgKzI1LDEyIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCiAjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0
aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNz
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBD
bGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1h
bCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51
bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8
VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVu
dGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9y
IElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpK
U1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxz
ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0
ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2
YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAg
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4
Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252
ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
SlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlND
OjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3Bh
Y2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7
Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJu
VHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25U
eXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwg
YW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAg
ICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBp
cyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQg
d2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxl
IHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxl
ZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBv
ciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBu
dWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7
Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
c3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1l
bnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVG
cm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBO
dWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxs
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZp
ZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0
dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUg
b2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICBpZiAo
VU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERl
dGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29u
c3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2Fz
dDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYo
Y29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5n
ZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnRO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7
Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0
dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVy
PElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRT
aG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHN0YXRpYyBp
bmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVy
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMgdWlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMy
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9V
SW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWdu
ZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExv
bmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50NjQo
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
c2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBl
cwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikK
LSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmlu
aXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3Rh
dGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0
ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51
bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
Ci0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGlu
ZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJs
ZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0
YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERv
dWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
JiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2
YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAg
ICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYg
dmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9i
amVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAg
ewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB7
IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNoSW5J
dGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwg
anNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNpYWxp
emF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBs
ZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRk
Ci0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQg
b2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBFeGVj
U3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7
Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
Q29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0g
ICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0g
ICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0
byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkg
JiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFs
dWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91Ymxl
KClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRv
dWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3Rh
dGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2lu
ZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+Owot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0
dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewot
ICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBK
U0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAg
IGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2Vu
ZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlND
OjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYg
KCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5v
bk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6
Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
YXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGlu
Z1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGlu
Z1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRp
Z3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJh
eS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9
IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERp
cmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBl
OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
ewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owot
ICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFw
cGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICByZXR1
cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlz
dCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlz
dC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAg
YXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFs
T2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVl
emUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBSZWNv
cmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExT
dHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0gICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICAgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmll
ci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0
ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICAg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
aWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAg
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVt
ZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVj
b3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxs
LCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBUeXBl
KE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0gICAg
ICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/
IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5
IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmpl
Y3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVy
YXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
Ci0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBM
aXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAgICAg
IC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KLSAgICAgICAg
ICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBib29s
IGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3Rh
dGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVu
ZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAv
IHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAgICAg
ICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFs
dWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZh
bHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJ
ZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0gICAgICAgICAg
ICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAgICAgICAgICAg
YXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgLy8g
My4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0
eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpj
b252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA0
LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0
byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3
aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNS4gT3Ro
ZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUp
LgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJldHVybiByZXN1
bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBN
YXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
Ci0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3Rv
dHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0
ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtl
eSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDog
bWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBh
biBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5v
dCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAgICAvLyBhbiBJ
ZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1
ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAg
IGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWly
LnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRh
UHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNyZWF0
ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAvLyA0LiBBc3Nl
cnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwg
Y3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERp
Y3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8
VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRp
Y3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0aW9u
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3Rh
dGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9u
VG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2Fs
bGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFj
a0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
ICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1
ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGlj
IFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNP
YmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQogdGVtcGxhdGU8dHlwZW5hbWUg
UmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgogc3RydWN0IENvbmRpdGlvbmFs
Q29udmVydGVyOwogCkBAIC0xNDU0LDIwICs1MSwyMCBAQCBzdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgCiB9OwogCiBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxG
cm9udDsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5k
Ojpmcm9udDxMaXN0PjsKLSAgICB9OwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25k
aXRpb24+CitzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKwordGVtcGxhdGU8dHlwZW5hbWUgTGlz
dD4KK3N0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+IHsKKyAgICB1c2luZyB0eXBl
ID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0Pgor
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+IHsKKyAgICB1c2luZyB0eXBlID0g
dm9pZDsKK307CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25k
aXRpb25hbEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZv
aWQ7Ci0gICAgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+
CkBAIC0xNjg1LDIxNiArMjgyLDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpT
Q29udmVydAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
SlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJp
bmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRy
PFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xv
YmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBh
dXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVu
dFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5l
cjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVj
dDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2Vi
R0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9y
dCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJ
dGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0g
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGlj
Q29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBW
YXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRh
aW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAg
ICAgIHNpemVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250
YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
c2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50
Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsg
MCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVy
dGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVz
dWx0KSB9OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFZhcmlhZGljLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VmFyaWFkaWMuaAkocmV2aXNpb24gMjEx
NTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRWYXJpYWRpYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUg
LT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7
CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBF
bmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKwor
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZl
cnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNo
YXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9u
IGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0
YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlND
b252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZl
cnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
LCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0
eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50
YXRpb25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJ
RExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxs
YWJsZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxh
YmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBp
cyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5n
IHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0
ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0
IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRo
ZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAv
LyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwg
aWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0
eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUg
VC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAg
IHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051
bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxs
cHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRp
YyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
Qm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3Rl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8v
IEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMg
c3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50
ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+
OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9Owor
CituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBw
KSB7IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBl
cworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMg
aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7
CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
dG9JbnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewor
ICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Z0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9u
Z0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWlu
dDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0
aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBk
b3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0K
KworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRv
dWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisg
ICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERv
dWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAg
ICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7Cisg
ICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAo
Y29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxs
QXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25m
aWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3Qg
dHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWls
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVu
YW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAg
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZN
JiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJ
RExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFk
ZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8v
IHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUs
IG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJy
YXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0Fy
cmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAg
ICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmln
aHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5p
bmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFs
dWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KDApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4o
ZG91YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERp
cmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7
CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
Q29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisg
ICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Cisg
ICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0
byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkg
JiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Cisg
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5s
aW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50
QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7
CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xv
YmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJv
emVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisg
ICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVu
dCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmlu
Zz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
ZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0
cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwor
ICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4g
c3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExS
ZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3Jk
PEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1l
IEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBW
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBp
bnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5k
ZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAg
IC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQu
IExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7
CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5
cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtl
eSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykg
eworICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShr
ZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAg
ICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3Jp
cHRvcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYg
ZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1
bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICgh
ZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRl
ZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRL
ZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7
CisKKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAg
ICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAg
ICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4g
SURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBD
b252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBz
ZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhp
cyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtl
eSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5
LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
Ni4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0
ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVh
Y2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0
aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAg
ICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8v
IDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVl
LgorICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBi
ZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAg
ICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAg
ICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVy
biByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFy
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248
VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxU
PihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0
cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6
OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwg
dHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
K307CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJv
b2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVl
PgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2lu
ZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExp
c3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlz
dCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmln
YW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVz
aW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJl
ck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28g
Y2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmln
YW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Cisg
ICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51
bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6
Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9u
YXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0
aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpf
MT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9
IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxp
c3QsIGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVj
dFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisK
KyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlw
ZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
TnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBi
cmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVz
IGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAg
ICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAg
ICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAg
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAg
ICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElm
IFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAg
ICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAg
Ly8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQor
ICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBy
ZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVM
aXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAg
ICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAg
ICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRv
IGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5
cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4g
SWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RU
eXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAg
ICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlm
IChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVz
ZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUs
IHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0
aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
c2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0
b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhl
bjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSBy
ZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96
ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJh
dG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBl
IGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBp
bmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMg
YSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBi
b29sZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6
OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZh
bHVlOworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29s
ZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUs
IHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmlj
IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAh
PSAwOworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVy
aWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJv
b2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4u
CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAg
IHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1
ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6
OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisg
ICAgeworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6
Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcg
SSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
V1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlLnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRv
RGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNP
TlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBS
ZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUs
ICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+Owor
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAg
ICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBj
dXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZl
ciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhO
U1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlw
ZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNz
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBl
ZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4g
b2JqZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8g
TUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExXZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBT
dXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUg
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7
CisKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVu
YW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcg
Q29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAg
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PENvbnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURM
VHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJn
dW1lbnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1
cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWND
b252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92
ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFZhcmlhZGljLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VmFyaWFkaWMuaAkocmV2aXNp
b24gMjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VmFy
aWFkaWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTg1NyArMjUsNTYgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3Qu
aD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVt
IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxB
c0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAg
dm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVk
IGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252
ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNW
YWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0
aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+
Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0
ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0g
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewot
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
PFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0K
LQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1
cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVy
c2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElE
TEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7
Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZl
cnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBW
IGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUg
Y2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5v
bk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAg
IC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4K
LSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwg
dGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8g
My4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhl
IHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0g
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9
IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0Lgot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlC
dWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
VmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+Owot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2Jq
ZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
JiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8
VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUg
VCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxU
Pj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMg
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Qnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsK
LSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9j
dGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
c2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAg
c3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQot
ICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0
dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9u
Zzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0
PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
Ci0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewot
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsK
LSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJu
IG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBu
dW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91
YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVy
bG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRp
YVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50
b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlw
ZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4g
dmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1
ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFs
dWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNP
YmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXkt
bGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0
ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51
bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0
aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBw
b3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dT
Y29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNp
bmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlm
ICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmRO
b25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6
OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhp
bmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250
aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4
VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91Ymxl
VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0
ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgot
ICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252
ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6Omlz
SlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9i
YWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRl
LCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3Ro
KCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFy
ZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwot
Ci0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVm
aW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0
YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5k
ZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAg
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAg
ewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0
cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQot
ICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pT
PFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9
IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3Qp
OwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJy
YXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KIG5h
bWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0g
ICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZp
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRl
LCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9V
U1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8
SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8g
MS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0g
ICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1
bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9i
amVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3Bl
cnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpT
Qzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7
Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8g
NS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0g
ICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRl
c2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3Jp
cHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNj
cmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0K
LSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBk
ZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBv
ciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0
aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZp
bmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAx
LiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBL
LgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252
ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CiAKLSAgICAgICAgICAgICAgICAvLyAyLiBM
ZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorc3RydWN0
IFZhcmlhZGljQ29udmVydGVyQmFzZTsKIAotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBl
ZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAg
ICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0
ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRL
ZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1
ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEg
cHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNl
LgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBw
ZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorc3RydWN0IFZh
cmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKIAotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYg
bWFwKQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RD
cmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVj
dEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZv
ciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0
byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUg
a2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90
ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0g
ICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAg
ICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2
YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9i
amVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0
ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAg
ICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAg
ICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBS
ZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExE
aWN0aW9uYXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rp
b25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0
aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRp
b248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBS
ZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUo
SlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JS
ZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
VDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJ
bnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KKyAgICAgICAgYXV0byByZXN1bHQgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogICAgIH0KIH07CiAK
LS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29u
dmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3Ry
dWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUo
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8
VD4+IHsKKyAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CisgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4o
KnJlc3VsdCk7CiAgICAgfQogfTsKIAotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6
ZnJvbnQ8TGlzdD47Ci0gICAgfTsKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CitzdHJ1Y3Qg
VmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAg
IHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0
ZW07CisgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4K
LSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIHN0cnVjdCBSZXN1bHQgewor
ICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxDb250
YWluZXI+IGFyZ3VtZW50czsKICAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBi
b29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6
OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+
OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExO
dW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
Zk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0g
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVt
ZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51
bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNp
bmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFz
ZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5n
IFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVu
Y2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250
PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVz
aW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
RnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5B
cnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBi
cmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBD
b25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+Owot
Ci0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsK
LSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJl
Y29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51
bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9m
UmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8v
IDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBu
dWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFz
TnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhl
IHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHBy
ZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3Jk
VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlv
bmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rp
b25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29y
ZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJl
Y29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBp
bXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2Jq
ZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhl
IG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9i
amVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElz
SURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9y
X2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAg
ICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAg
ICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5
cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQot
ICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsK
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEw
LgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAg
ICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dp
bmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0
IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3Ip
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhv
ZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1
bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVu
Y2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFz
SXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZy
b3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEu
IExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVm
aW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlw
ZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5B
cnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlw
ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rp
b25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAg
MTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jv
b2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVh
biwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYg
ViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVt
ZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0g
ICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhh
c051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgot
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJp
bmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElm
IHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlw
ZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0g
SURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBl
TGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5k
OjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZh
bHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0
aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50Lmlu
ZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVl
OwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7
Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5j
ZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUg
PT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+Pihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERh
dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNP
Tj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0K
IH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBl
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVl
PFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVl
LT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwg
dGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFs
aXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
IAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+Owot
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAg
ewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5M
SUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6
Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdM
KQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1
ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMK
LQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVz
aW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVz
aW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAg
ICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJ
dGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAg
c3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0g
ICAgfTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpW
YXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50
cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KUluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmgJKHJldmlzaW9uIDIx
MTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjEx
NTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1l
L0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+
IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwor
CitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5m
b3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlND
OjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8v
IFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJz
aW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFy
KiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sK
KyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBm
cm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRo
cm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0
ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
dHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkK
K3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9u
KCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFs
dWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4m
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlw
ZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0
aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURM
QW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFi
bGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMg
bm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBw
ZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUg
d2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBp
cyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUg
SURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8g
Tk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlm
IFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlw
ZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQu
CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
dGhpc09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1
c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChV
JiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
VDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxs
VmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51
bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0
cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMg
Ym9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jv
b2xlYW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZl
cj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1
c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBB
cnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1
cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
PjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVy
ZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6
VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAg
IFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJv
d2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwor
bmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1
cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
Z2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkg
eyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZh
dWx0Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGlu
dDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9J
bnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNs
YW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewor
ICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRv
SW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAg
ICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0
b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9J
bnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNV
SW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGlu
ZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91
YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShu
dW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3Vi
bGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihu
dW1iZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZs
b2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAg
IHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50
b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3Vi
bGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5p
dGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAg
c3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAg
IH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3Ry
aWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFz
RW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmln
dXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0
eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFt
ZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVj
dCkKKyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAg
ICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYg
dm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAg
IC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMg
aXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURM
TG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQg
YW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0
YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5
KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJh
eUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0
IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5k
ZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ld
LmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
SW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVl
IHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250
aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRv
dWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJl
Y3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewor
ICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0Nv
bnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsK
KyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAg
ICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAg
ICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3Rv
Y29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJl
c3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgp
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8g
dGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
SlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYg
SlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9
PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhW
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQo
KTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+
OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGlu
ZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAg
ICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwor
ICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2Jh
bE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3pl
bkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2Vx
dWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAg
ICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQp
KTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxs
cHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29u
c3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwor
CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+
IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRl
bnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJp
bmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAg
ICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxL
LCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBL
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5z
dGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVm
aW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAv
LyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7
CisgICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBM
ZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3Bl
cnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwor
ICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMs
IEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkg
b2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsK
KyAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5
KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAg
ICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVz
Y3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0
b3IpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRl
c2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3Ig
ZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0
CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRl
c2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQg
dG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5
ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwor
CisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAg
ICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAg
ICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElE
TCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29u
dmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0
IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMg
Y2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXks
IHR5cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwg
dHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYu
IFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29y
ZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUo
JU9iamVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNo
IG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5
VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNv
bnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhp
cyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAg
ICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAy
LiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4K
KyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
a2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUg
ISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAg
ICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAg
ICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4g
cmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9i
YWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+
PiB7CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4o
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVy
dEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjph
c09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3Jl
YXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZh
Y2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0
IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0
eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRy
dWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9
OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4K
KyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxG
cm9udDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAg
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcg
Q29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0
LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+
IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3Qg
PSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJl
ck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2lu
ZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJP
Zk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNo
ZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAg
IHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1i
ZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6
OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVz
aW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpf
MT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5B
cnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+
OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFy
eVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
IT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlv
bmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAw
OworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0
LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RU
eXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAr
IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisg
ICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUg
aW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051
bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJp
Z2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBi
ZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAg
Ly8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAg
IAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAg
ICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAg
ICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBW
IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAg
ICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJ
REwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8v
ICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAg
ICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6
XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0
dXJuVmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlz
dD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVj
bHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVu
dGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAg
ICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAg
ICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBj
YXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBl
KEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElm
IFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlw
ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAg
SlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0
aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0
aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhl
IHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNl
cXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9y
TWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVz
dWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVu
IGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRv
ck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
Y29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElm
IHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBh
bmQgc3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5j
bHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVu
Y2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEg
Qm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9v
bGVhbi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjph
bnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1
ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUu
aXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVh
biwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0
aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0
eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNp
emU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNU
eXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0g
MDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmlj
IHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29s
ZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgor
ICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1
c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxl
bWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVu
Y2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2
YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAg
IHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6
Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZv
cl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkg
PSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlw
ZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAg
ICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdU
Rjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
CisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1
ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0Rh
dGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05T
dHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVm
UHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAm
Z2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExF
dmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAg
ICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3Vy
cmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0
ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIg
dHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNS
ZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQo
dm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAg
ICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9i
amVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
V2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3Vw
cG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZl
cnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3Qg
VmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElE
TFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwor
CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVy
QmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpv
cHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlh
ZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFt
ZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENv
bnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAg
ICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxD
b250YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5
cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3Vt
ZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29u
dmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9
IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0
YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5j
aGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
V1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUo
cmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmgJKHJldmlzaW9uIDIxMTU0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDE3OTggKzI1LDEyIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgot
I2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50
YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xh
c3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2Us
IENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9y
bWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25h
bDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVt
ZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBm
b3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVl
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZh
bHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3Jl
YXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENv
bnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVz
cGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+
IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1
cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lv
blR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0
LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAot
ICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBl
IGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRl
ZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFi
bGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5k
bGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVl
IG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxl
bWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVy
PFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAo
VDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZh
dWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFu
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3Jh
cHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVy
VmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlND
OjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVm
UHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRS
ZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlw
ZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihj
b25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9j
YXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJl
Zihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBw
LmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+
IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGlj
IGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1i
ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50
b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNp
Z25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50
NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2
NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5
cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRp
YyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUg
bnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAg
c3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQot
ICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
ICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAm
JiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
ICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJ
bkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRl
LCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lh
bGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGlt
cGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBh
ZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9h
ZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4
ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
IHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsK
LSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9u
IHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhW
YWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwg
ZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZz
dGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVz
aW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47
Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBK
U0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBp
ZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5k
Tm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4
aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29u
dGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVl
ID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0
RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBs
aXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBs
aXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAg
ICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9i
YWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZy
ZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJl
Y29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1w
bGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50
aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlm
aWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9C
eXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAg
ICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0g
ICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiBy
ZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51
bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJl
ID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJy
YXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9i
amVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGlu
IExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAg
ICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAg
ICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJv
b2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZz
dGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3Qg
dW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxl
IC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAg
ICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwg
dmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6
OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAg
ICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9m
IHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46
OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVl
IHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVu
IHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFu
ZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBP
dGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1
ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVl
IH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJl
c3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJv
dG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0
YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAo
a2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIg
OiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRv
IGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMg
bm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFu
IElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1Zh
bHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAg
ICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBh
aXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURh
dGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3Jl
YXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFz
c2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
LCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
ZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRp
b24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBz
dGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRp
b25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBD
YWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25U
aHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZh
bHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjph
c09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9u
YWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJu
VHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVz
cGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9u
PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAg
ICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3Qs
IGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25h
bEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlv
bj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVz
aW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1l
IFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51
bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmlj
VHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5
cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElE
TEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+Owot
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5k
OjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3Ry
aW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5n
VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1
ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNl
VHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVu
Y2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5p
b24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96
ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1
c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
RGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAg
fHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGlj
dGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAg
IHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxp
c3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29y
ZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNp
bmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29y
ZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZE
aWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJ
bnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZh
Y2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBh
IG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBi
cmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+
Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0
dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBV
bmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAg
IC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAo
aGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVj
b3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0
Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBh
biBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAg
IDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAo
YnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1
ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsK
LSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0
byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBl
KT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVz
aW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVz
aW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJh
d1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVl
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlm
ICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50
YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAg
aWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZh
bHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkg
a2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAg
ICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZh
bHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9m
IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
cmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2Yg
dGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAh
PSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRl
cmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2Vx
dWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0
TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIu
IFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
My4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0
aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2Yg
dGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0
ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZy
b3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNE
aWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5j
bHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29y
ZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRU
eXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNr
IGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEy
LjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmpl
Y3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUg
b2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZh
bHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAg
ICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4o
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29s
ZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5
cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5n
VHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAg
ICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmlu
Z1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0K
LSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAg
ICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
TnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlm
IChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xl
YW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0g
ICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQu
Li4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVM
aXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdh
bmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6
ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAg
ICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8
SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2Vx
dWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1l
IFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwot
ICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJy
aWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6
dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAg
QVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4g
ewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
YXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91Ymxl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgm
c3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05Q
YXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZh
bHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmpl
Y3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBF
dmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVu
ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlz
dGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQo
JnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1l
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAg
ICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnRO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAg
fQotfTsKLQogI2lmIEVOQUJMRShXRUJHTCkKIAotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2Vi
R0xBbnkgdHlwZQorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
QmFzZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFdlYkdMQW55PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwpAQCAtMTgyOCw3MyArNDIsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExXZWJHTEFuCiAgICAgfQogfTsKIAotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERl
dGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBl
bmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxs
b3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0
ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIg
OiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0g
dHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1
c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7
Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAg
IHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
ICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBX
VEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWZJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0WFBhdGhOU1Jlc29sdmVyLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVj
dElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlv
bgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xh
bXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWws
IFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBi
eSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1l
cmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+
IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVt
ZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0
aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2Vy
PihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRh
dGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhj
ZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJ
REwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNT
dHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0ds
b2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1
ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
eworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2
YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAg
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4
Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9K
UzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9i
amVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVk
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFs
dWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVy
dGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25U
eXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpT
Qzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6
VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNl
IERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAor
ICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVy
c2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewor
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5
cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFu
ZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAg
Ly8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMg
YSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdp
dGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0
eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQg
ZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3Ig
dW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVs
bC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwor
ICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2Vy
PihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
VDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVl
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjpp
c051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVs
bCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBC
b29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChi
b29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsK
KyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVk
UmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3
IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8
QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxh
dGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJD
bGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcg
VG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVy
blR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIo
KSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9i
amVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRh
aWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0
IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNv
bnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0
KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewor
ICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hv
cnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5s
aW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRv
dWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7
CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQz
Ml90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUlu
dDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25n
TG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENs
YW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNp
Z25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisg
ICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRl
KSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVk
RmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
CisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQor
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUg
bnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0
aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAg
Ly8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAg
ICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFs
dWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZh
bHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAg
IHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmpl
Y3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2
bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7
CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRl
cmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpz
VmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXph
dGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVt
ZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAor
ICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9m
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0
YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewor
ICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0Nv
bnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsK
KyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAg
ICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAg
ICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3Rv
Y29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJp
Y0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJl
c3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgp
KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8g
dGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
SlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYg
SlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9
PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0
KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVl
LmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgp
W2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3Vi
bGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRl
LCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRl
ZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcg
R2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVy
aWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6
SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICgh
YXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25P
YnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFy
cmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAg
ICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdT
aGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1
b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBK
U0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRW
YWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJl
Y3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0
dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9h
dD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9h
dD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAg
ICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJu
IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3Qp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZy
b3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1
dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9i
amVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXpl
KCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3Jk
IHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3Ry
aW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRl
PD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIu
c3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVT
dHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlk
ZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVy
PElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVu
dGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRp
b25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29y
ZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwg
cmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShP
KSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpT
Qzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBP
LltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBr
ZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0
aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlz
dCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAv
LyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAg
ICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBk
aWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRl
LCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRl
ZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1
bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAg
Ly8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVl
KCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAg
ICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1
ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRl
bnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAg
ICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1
dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMu
IExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlw
ZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29u
dmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4g
SWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8g
dHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hl
biBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUg
dGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVy
d2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4K
KyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0
LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFw
VHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAor
ICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5
cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUp
OworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXks
IHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1h
cCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4g
RUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3Qg
cmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRl
bnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUg
YmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBh
dXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52
YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVBy
b3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVk
ID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0
OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNy
ZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0
aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExE
aWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0
aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRp
b248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRp
YyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBl
eGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRv
SlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxi
YWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tG
dW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUp
LCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBS
ZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2Jq
ZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJl
dHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENv
bnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBl
KENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNl
IERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cisg
ICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0
PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAg
ICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFs
c2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJv
bnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6
dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlv
bjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcg
VHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlw
ZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJp
Y1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBl
cyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUg
PSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMg
IT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51
bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3Ry
aW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBl
cyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNl
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBl
cyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5
cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VU
eXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpz
aXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFy
cmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5n
IERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0
aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZh
bHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBu
dW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9u
YXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBo
YXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNp
bmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwg
aGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVj
b3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlw
ZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBS
ZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlw
ZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rp
b25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVy
ZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxi
cmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVs
bGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdh
bmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZh
bHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElE
TE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5l
ZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9u
IGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8g
My4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlv
bmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNE
aWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGlj
dGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNS
ZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRU
eXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3Jt
IG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGlu
dGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVl
IHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4g
SWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmln
YW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7
CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAg
ICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYg
dHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6
dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0
eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcg
UmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcg
V3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlw
ZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFj
YXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlv
blR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAo
cmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUu
dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5k
IG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBj
ZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAg
ICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUg
aXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0
TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIu
IFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
My4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0
aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0
IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29u
c3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7
CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwg
dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRv
cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5j
ZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRo
b2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0
dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJ
ZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcg
YQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0
IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0
b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVu
QXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0
byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rp
b25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGlj
dGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUs
IGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwg
dGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmpl
Y3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUs
IHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBz
dGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlm
IChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5U
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBl
TGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBl
ID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlm
IChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlw
ZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAg
ICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAg
ICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1l
cmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhh
c0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwg
aGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAg
ICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+
IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3Qg
PSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUg
PSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6
bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPElt
cGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1
dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6
OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5j
ZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RG
OjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAg
ICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
IXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2Fu
ZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1
ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NF
UlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Cisg
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0
ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNl
KCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkg
OiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50
IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxU
Pj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5l
ciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3Rh
dGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
UmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFs
dWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNS
ZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9
OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFu
eSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAg
fQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlh
ZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVy
dGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJm
YWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+
OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4o
KnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJh
c2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0
b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3Qg
YXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1
bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNv
bnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFy
dEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Cisg
ICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVs
bG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBl
Pjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShs
ZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBp
IDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWND
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50
KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6
bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVl
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmgJKHJldmlzaW9u
IDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFhQYXRo
TlNSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNzQ3ICsyNSwxMSBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRp
bmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxy
dW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9i
amVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsK
LWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0
TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsK
LSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9u
IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNl
RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlv
blZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAt
PiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhV
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4
Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
T3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51
bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcq
IGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0
ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9i
amVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFs
c2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUm
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAg
IHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkK
LXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihz
dGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZ
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17
Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9w
YWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24o
KSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNW
YWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVD
b252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0
cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0g
ICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxs
YWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6
VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUg
Y29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVl
IHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxs
YWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1Ry
ZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/
Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdo
ZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZp
bmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAg
ICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2lu
ZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVj
dCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAg
ICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
U3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlND
b252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFu
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9
Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJu
VHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBv
cnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlC
dWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlw
ZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6Okdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFw
cGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7
Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9
IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHAp
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHAp
OyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJl
ZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0K
LQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0
YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1
cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0lu
dDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgo
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3Rl
dD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsK
LSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAg
cmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAg
fQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZz
dGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExv
bmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewot
ICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAg
ICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0g
ICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAg
ICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICBy
ZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRk
IG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmlu
ZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlz
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlND
Ojphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBB
cnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUo
JnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBm
b3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQg
Zm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8v
IHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBU
aHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAg
ICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5
cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRl
cjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAg
ICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAg
ICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFz
dEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
LSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/
Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJ
bmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6
OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50
MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
aW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBk
b3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsK
LSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJp
Y0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpT
Qzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252
ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXkt
Pmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5s
ZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1h
c2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hh
cGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6Ompz
VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRl
eCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlw
ZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJs
ZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikK
LSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAg
Zm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9K
UzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6
Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFy
cmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwg
bGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVj
LCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUK
LQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlw
ZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRl
bnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5n
KCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmll
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmco
c3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4g
c3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJl
Y29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9u
VHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBl
OwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBW
Pi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJu
IHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBu
b3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1
cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3du
UHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2
bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRP
d25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9k
ZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAg
ICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRl
cjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBM
ZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6
OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXRE
ZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXks
IGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQg
YW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmlu
ZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51
bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNV
bmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAg
IC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0
eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmll
ckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8v
IDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3Vi
VmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0
eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgot
ICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChz
dGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlw
ZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRW
YWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlz
IGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBj
YXNlLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwg
YXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYg
bWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAg
ICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4K
LSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAg
ICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVl
KSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewot
ICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWly
ZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmll
ciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFs
dWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVz
VmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7
Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5
KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVz
dWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZh
bHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVh
dGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBU
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhl
YywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1
bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlv
bjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9u
VGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYg
KCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xv
YmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8
VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZh
bHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3Ry
dWN0IENvbmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2lu
ZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0g
ICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0
eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlw
ZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVM
aXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAw
IHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVy
aWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25k
aXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRp
b248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3Ry
aW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlw
ZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAw
PjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAw
IHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1
ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBD
b25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAh
PSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZy
b3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAg
ICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlw
ZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rp
b25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5
PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwot
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0
aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGlj
dGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGlj
dGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlw
ZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0g
MCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29y
ZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
UmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVl
bmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlU
eXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUg
dHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwot
ICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGws
IGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1i
ZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4
cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5
cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFy
eVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRU
eXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVj
dCwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFj
ZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSBy
ZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjph
bnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAg
ICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkg
ewotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6
dHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46Oldy
YXBwZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVy
VHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRW
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUo
Y2FzdGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJu
VmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igc3RlcHMgNSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9i
amVjdCwgdGhlbjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0g
dmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGlt
aXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAg
IC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4g
b2JqZWN0LiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUg
ZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0
dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUs
IGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwg
QEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZB
YnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRo
b2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUg
ZnJvbSBWIGFuZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJl
dHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlU
eXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0
IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlU
eXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFy
eVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJl
Y29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1Jl
Y29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50
ZXJmYWNlIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiBy
ZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBv
YmplY3QgYW5kIHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46
Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6Omlz
X3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNC
b29sZWFuVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46
OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAg
aWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
TnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJp
Z2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNT
dHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFz
U3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAv
LyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAo
aGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlw
ZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAg
ICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xl
YW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9v
bGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8g
MTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAg
ICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBl
bmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9z
ZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVu
dGF0aW9uVHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5k
ZXggPSB2YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFs
dWU+IHJldHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZd
KGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1v
dmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAg
ICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVy
blZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8
VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFy
aWFudCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0
dXJuVmFsdWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3Rh
dGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFs
dWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpT
T04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6
OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3Rl
bmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6
OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsK
LSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gUmVmUHRyPFQ+OwogICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CkBAIC0xNzk5LDEwMiArNjMsNCBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8CiAgICAgfQogfTsKIAot
Ly8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0j
aWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRh
aWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0g
ICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8q
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3Vs
dCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
LSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURM
VHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRl
bT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1l
bnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7
Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlw
ZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRW
YXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4
KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYg
KHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9
OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29u
dGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgg
LSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsK
LSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9w
dCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlRGF0YUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbWFnZURhdGFDdXN0b20uY3BwCShyZXZpc2lvbiAyMTE2NDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0YUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0
YS5oIgogCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDIxMTY0MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiAjaWYgRU5BQkxFKFJFQURBQkxFX1NUUkVBTV9BUEkpCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaCIKICNpbmNsdWRlICJK
U1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWUuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxMTY0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1dlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oIgogI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIxMTY0MikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjgxLDcgKzQ2ODEsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hl
Y2sKICAgICAgICAgbXkgJHZhbHVlID0gJG5hbWU7CiAKICAgICAgICAgaWYgKCRhcmd1bWVudC0+
aXNWYXJpYWRpYykgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQ29udmVy
dC5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RP
TUNvbnZlcnRWYXJpYWRpYy5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzRm9ySURMVHlwZSgkdHlwZSwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgCiAgICAg
ICAgICAgICBteSAkSURMVHlwZSA9IEdldElETFR5cGUoJGludGVyZmFjZSwgJHR5cGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmNwcAkocmV2aXNpb24gMjExNjQy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKICNpbmNsdWRlICJKU1dl
YkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAi
SlNXZWJHTFByb2dyYW0uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJp
YWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMu
bW0JKHJldmlzaW9uIDIxMTY0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TZXJp
YWxpemVkUGxhdGZvcm1SZXByZXNlbnRhdGlvbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQAogI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKERBVEFDVUVfVkFM
VUUpCiAjaW5jbHVkZSAiU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMuaCIKIAot
I2ltcG9ydCAiSlNET01CaW5kaW5nLmgiCisjaW1wb3J0ICJKU0RPTUNvbnZlcnRCdWZmZXJTb3Vy
Y2UuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0IDxBVkZvdW5kYXRpb24vQVZN
ZXRhZGF0YUl0ZW0uaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNTdHJpbmcuaD4KQEAgLTE0Niwx
MCArMTQ2LDEwIEBAIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0aERhdGFJbkNvbnRleHQKIHsK
ICAgICBhdXRvIGRhdGFBcnJheSA9IEFycmF5QnVmZmVyOjp0cnlDcmVhdGUoW2RhdGEgYnl0ZXNd
LCBbZGF0YSBsZW5ndGhdKTsKIAotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gdG9KUyhbY29u
dGV4dCBKU0dsb2JhbENvbnRleHRSZWZdKTsKLSAgICBKU0M6OkpTVmFsdWUgYXJyYXkgPSB0b0pT
KGV4ZWMsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKSwgZGF0YUFycmF5LmdldCgpKTsKKyAgICBhdXRvKiBzdGF0ZSA9IHRvSlMoW2Nv
bnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisgICAgSlNDOjpKU1ZhbHVlIGFycmF5ID0gdG9K
UyhzdGF0ZSwgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKSwgZGF0YUFycmF5LmdldCgpKTsKIAotICAgIHJldHVybiBbSlNWYWx1ZSB2
YWx1ZVdpdGhKU1ZhbHVlUmVmOnRvUmVmKGV4ZWMsIGFycmF5KSBpbkNvbnRleHQ6Y29udGV4dF07
CisgICAgcmV0dXJuIFtKU1ZhbHVlIHZhbHVlV2l0aEpTVmFsdWVSZWY6dG9SZWYoc3RhdGUsIGFy
cmF5KSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CiAKIHN0YXRpYyBKU1ZhbHVlICpqc1ZhbHVlV2l0
aEFycmF5SW5Db250ZXh0KE5TQXJyYXkgKmFycmF5LCBKU0NvbnRleHQgKmNvbnRleHQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300583</attachid>
            <date>2017-02-03 17:34:32 -0800</date>
            <delta_ts>2017-02-03 17:34:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167806-20170203173216.patch</filename>
            <type>text/plain</type>
            <size>3704162</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE3LTAyLTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSlNET01Db252ZXJ0IGlzIHRvbyBiaWcu
IFNwbGl0IGl0IHVwIQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3ODA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXQgSlNET01Db252ZXJ0IHVwIHJvdWdobHkgYnkgSURMIHR5cGUuIFNvbWUgYXJl
IGdyb3VwZWQgZm9yIGNvbnZlbmllbmNlLCBlLmcuIGFsbCB0aGUKKyAgICAgICAgc3RyaW5nIHR5
cGVzIGFyZSB0b2dldGhlciwgYWxsIHRoZSBudW1lcmljIHR5cGVzIGFyZSB0b2dldGhlci4gQWxz
byBtb3ZlZCBoZWxwZXJzIGZyb20gCisgICAgICAgIEpTRE9NQmluZGluZyB0byB0aGVpciByZXNw
ZWN0aXZlIEpTRE9NQ29udmVydEZvbyBoZWFkZXIuIEZvciBub3csIEpTRE9NQ29udmVydC5oIGFz
IGFuCisgICAgICAgIHVtYnJlbGxhIG9mIGFsbCB0aGUgc3ViIGhlYWRlcnMsIGJ1dCBpdCB3aWxs
IGJlIHJlbW92ZWQsIGFuZCB0aGUgY29kZSBnZW5lcmF0b3IgdGF1Z2h0CisgICAgICAgIHRvIGlu
Y2x1ZGUgdGhlIHJpZ2h0IGhlYWRlciBpbiBhIHN1YnNlcXVlbnQgcGF0Y2guCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmg6CisgICAgICAgIFJlbW92ZSB0b0pTIHRoYXQgdGFrZXMgYSBzdGQ6Om9wdGlv
bmFsPElEQktleVBhdGg+LCBpdCB3YXMgdW51c2VkLCBhbmQgdXBkYXRlIGRhdGUgY29kZQorICAg
ICAgICB0byBvbmx5IGNhbGwgdmFsdWVUb0RhdGUgb25jZSwgYW5kIHBhc3MgdGhpbmdzIGJ5IHJl
ZmVyZW5jZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIE1vdmUgbW9zdCBvZiB0
aGUgY29udmVyc2lvbiBoZWxwZXJzIGludG8gdGhlaXIgcmVzcGVjdGl2ZSBKU0RPTUNvbnZlcnRG
b28gaGVhZGVyLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6CisgICAg
ICAgIExlYXZlIGZvciBub3csIGp1c3QgaGFzIGluY2x1ZGVzIG9mIGFsbCB0aGUgYnJva2VuIG91
dCBoZWFkZXJzLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJhc2UuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0Qm9vbGVhbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRCdWZmZXJTb3VyY2UuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Q2FsbGJh
Y2tzLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Db252ZXJ0RGljdGlvbmFyeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRFbnVtZXJhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFdmVudExp
c3RlbmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRJbnRlcmZhY2UuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0SlNPTi5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnROdWxsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGxhYmxlLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01Db252ZXJ0T2JqZWN0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydC5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFJl
Y29yZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnQuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0VW5pb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0VmFyaWFk
aWMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
LmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmguCisgICAgICAgICog
YmluZGluZ3MvanMvSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oLgorCisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjayk6CisgICAgICAgIEFkZCBpbmNsdWRlIG9mIEpTRE9NQ29udmVydFZhcmlhZGlj
LmggcmF0aGVyIHRoYW4gSlNET01Db252ZXJ0LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlND
cnlwdG9DdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ3J5cHRvT3BlcmF0aW9u
RGF0YS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQW55LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW06CisgICAgICAgIEFkZCBp
bmNsdWRlcyBmb3Igc3BlY2lmaWMgSlNET01Db252ZXJ0IGhlYWRlciBub3cgdGhhdCBoZWxwZXJz
IGhhdmUgCisgICAgICAgIGJlZW4gbW92ZWQgdGhlaXIgZnJvbSBKU0RPTUJpbmRpbmcuaAorCiAy
MDE3LTAyLTAzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFT
U0VSVCBpbiBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1lZGlhRWxlbWVudApJbmRleDogU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDg1LDYgKzEwODUsOSBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNDU1NSdWxlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdz
L2pzL0pTQ1NTUnVsZUxpc3RDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuY3Bw
CisgICAgYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5jcHAKKyAgICBiaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRTdHJpbmdzLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3Iu
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNGb250RmFjZUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0ZvbnRGYWNlU2V0Q3VzdG9tLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExNjU5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yODQsOCArMjg0LDggQEAKIAkJMDdCNzExNkYxRDg5OUU2MzAwOUYwRkZCIC8qIENh
cHR1cmVEZXZpY2VNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwN0I3MTE2QzFEODk5RTYzMDA5RjBGRkIgLyogQ2FwdHVyZURldmljZU1hbmFn
ZXIuaCAqLzsgfTsKIAkJMDdDMDQ2QzMxRTQyNTA4QjAwNzIwMUU3IC8qIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
LmNwcCAqLzsgfTsKIAkJMDdDMDQ2QzQxRTQyNTA4QjAwNzIwMUU3IC8qIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA3QzA0
NkM3MUU0MjUxNTUwMDcyMDFFNyAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtQ29jb2Eu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDMDQ2
QzUxRTQyNTEyRjAwNzIwMUU3IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1Db2NvYS5j
cHAgKi87IH07Ci0JCTA3QzA0NkM4MUU0MjUxNTUwMDcyMDFFNyAvKiBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU3RyZWFtQ29jb2EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3QzA0NkM2MUU0MjUxMkYwMDcyMDFFNyAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1l
ZGlhU3RyZWFtQ29jb2EuaCAqLzsgfTsKKwkJMDdDMDQ2QzcxRTQyNTE1NTAwNzIwMUU3IC8qIChu
dWxsKSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMDdDMDQ2Qzgx
RTQyNTE1NTAwNzIwMUU3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgfTsKIAkJMDdDMDQ2Q0IxRTQyNjQxMzAwNzIwMUU3IC8qIEF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
M0I4NzU2MUU0MERDRTUwMDcxQzBFQyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdDMUMwRTIxQkZC
NjAwMTAwQkQyMjU2IC8qIE1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDMUMwRTAxQkZCNjAwMTAw
QkQyMjU2IC8qIE1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oICovOyB9OwogCQkwN0Mx
QzBFNTFCRkI2MEVEMDBCRDIyNTYgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0
cmFpbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0MxQzBFNDFCRkI2MEVEMDBCRDIyNTYgLyogUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTI4MjcsNiArMjgyNywzMyBAQAogCQk3QUY5QjIwRTE4Q0ZCNUY0MDBDNjRCRUYgLyog
SlNWVFRSZWdpb25MaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdBRjlCMjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3Bw
ICovOyB9OwogCQk3QUY5QjIwRjE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUY5QjIwQjE4
Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmggKi87IH07CiAJCTdCRTc0MjczODFG
QTkwNkZCQjRGMEYyQyAvKiBKU1NWR0dyYXBoaWNzRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTUwQzRDMDJCRUQ4OTM2RjgxOEUyRjk5IC8q
IEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggKi87IH07CisJCTdDMDRGRTU2MUU0M0Q1MkEwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnRBbnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMDRGRTQ0MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRBbnku
aCAqLzsgfTsKKwkJN0MwNEZFNTcxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTNC
MUU0MkQ1MDAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCYXNlLmggKi87IH07CisJCTdDMDRGRTU4
MUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCb29sZWFuLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0NTFFNDNCNTExMDA3RkNCMjQg
LyogSlNET01Db252ZXJ0Qm9vbGVhbi5oICovOyB9OworCQk3QzA0RkU1OTFFNDNENTJBMDA3RkNC
MjQgLyogSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0MzFFNDJGNzY4MDA3RkNCMjQgLyogSlNET01D
b252ZXJ0QnVmZmVyU291cmNlLmggKi87IH07CisJCTdDMDRGRTVBMUU0M0Q1MkEwMDdGQ0IyNCAv
KiBKU0RPTUNvbnZlcnRDYWxsYmFja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMDRGRTRFMUU0M0MxNTIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRD
YWxsYmFja3MuaCAqLzsgfTsKKwkJN0MwNEZFNUIxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydERhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0MwNEZFNDExRTQyRjRBMjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERhdGUuY3BwICovOyB9
OworCQk3QzA0RkU1QzFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNDAxRTQyRjQx
QTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERhdGUuaCAqLzsgfTsKKwkJN0MwNEZFNUQxRTQzRDUy
QTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTQ2MUU0M0I1MTEwMDdGQ0IyNCAvKiBK
U0RPTUNvbnZlcnREaWN0aW9uYXJ5LmggKi87IH07CisJCTdDMDRGRTVFMUU0M0Q1MkEwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNDcxRTQzQjUxMTAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydEVudW1lcmF0aW9uLmggKi87IH07CisJCTdDMDRGRTVGMUU0M0Q1MkEwMDdGQ0IyNCAvKiBK
U0RPTUNvbnZlcnRFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0RjFFNDNDMjUwMDA3RkNCMjQgLyogSlNET01Db252ZXJ0
RXZlbnRMaXN0ZW5lci5oICovOyB9OworCQk3QzA0RkU2MDFFNDNENTJBMDA3RkNCMjQgLyogSlNE
T01Db252ZXJ0SW5kZXhlZERCLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzA0RkU1NTFFNDNDMzY0MDA3RkNCMjQgLyogSlNET01Db252ZXJ0SW5kZXhl
ZERCLmggKi87IH07CisJCTdDMDRGRTYxMUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJ
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDRGRTQyMUU0MkY2M0MwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCAqLzsg
fTsKKwkJN0MwNEZFNjIxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEpTT04uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTUwMUU0M0My
NTAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRKU09OLmggKi87IH07CisJCTdDMDRGRTYzMUU0M0Q1
MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0ODFFNDNCNTExMDA3RkNCMjQgLyogSlNET01D
b252ZXJ0TnVsbC5oICovOyB9OworCQk3QzA0RkU2NDFFNDNENTJBMDA3RkNCMjQgLyogSlNET01D
b252ZXJ0TnVsbGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMDRGRTQ5MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdWxsYWJsZS5o
ICovOyB9OworCQk3QzA0RkU2NTFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVtYmVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0
RkUzRTFFNDJGMjFGMDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVtYmVycy5jcHAgKi87IH07CisJ
CTdDMDRGRTY2MUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdW1iZXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkUzQzFFNDJENTAw
MDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVtYmVycy5oICovOyB9OworCQk3QzA0RkU2NzFFNDNE
NTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzA0RkU0QTFFNDNCNTEyMDA3RkNCMjQgLyogSlNE
T01Db252ZXJ0T2JqZWN0LmggKi87IH07CisJCTdDMDRGRTY4MUU0M0Q1MkIwMDdGQ0IyNCAvKiBK
U0RPTUNvbnZlcnRSZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMDRGRTRDMUU0M0I3QzMwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRSZWNvcmQu
aCAqLzsgfTsKKwkJN0MwNEZFNjkxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFNlcXVl
bmNlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mw
NEZFNEIxRTQzQjUxMjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFNlcXVlbmNlcy5oICovOyB9Owor
CQk3QzA0RkU2QTFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U2VyaWFsaXplZFNjcmlw
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
QzA0RkU1MTFFNDNDMkEyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U2VyaWFsaXplZFNjcmlwdFZh
bHVlLmggKi87IH07CisJCTdDMDRGRTZCMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRT
dHJpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDMDRGRTNGMUU0MkYzNDMwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRTdHJpbmdzLmNwcCAqLzsg
fTsKKwkJN0MwNEZFNkMxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFN0cmluZ3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTNEMUU0
MkQ1MDAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRTdHJpbmdzLmggKi87IH07CisJCTdDMDRGRTZE
MUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRVbmlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwNEZFNEQxRTQzQjgwNTAwN0ZDQjI0IC8q
IEpTRE9NQ29udmVydFVuaW9uLmggKi87IH07CisJCTdDMDRGRTZFMUU0M0Q1MkIwMDdGQ0IyNCAv
KiBKU0RPTUNvbnZlcnRWYXJpYWRpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0MwNEZFNTIxRTQzQzJDQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFZh
cmlhZGljLmggKi87IH07CisJCTdDMDRGRTZGMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZl
cnRXZWJHTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MwNEZFNTMxRTQzQzJDQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFdlYkdMLmggKi87IH07CisJ
CTdDMDRGRTcwMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDRGRTU0
MUU0M0MyQ0IwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaCAqLzsgfTsK
IAkJN0MxODQzRkQxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMTg0M0ZCMUM4QjcyODMwMDJFQjk3
MyAvKiBBdXRvZmlsbC5jcHAgKi87IH07CiAJCTdDMTg0M0ZFMUM4QjcyODMwMDJFQjk3MyAvKiBB
dXRvZmlsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0MxODQzRkMxQzhCNzI4MzAwMkVCOTczIC8qIEF1dG9maWxsLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MxRTk3MjcxQTlGOTgzNDAwN0JGMEZC
IC8qIEF1dG9GaWxsQnV0dG9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzFFOTcyNTFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxC
dXR0b25FbGVtZW50LmNwcCAqLzsgfTsKQEAgLTEwMzk3LDYgKzEwNDI0LDMzIEBACiAJCTdBRjlC
MjBBMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9u
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwNDA2MTIxQzY2RUU5QzAwQUYwNzEx
IC8qIE5TU2Nyb2xsZXJJbXBTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TlNTY3JvbGxlckltcFNQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzA0RkUz
QjFFNDJENTAwMDA3RkNCMjQgLyogSlNET01Db252ZXJ0QmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDMDRGRTNDMUU0MkQ1MDAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdW1iZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29udmVydE51bWJlcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFM0QxRTQyRDUwMDAwN0ZDQjI0
IC8qIEpTRE9NQ29udmVydFN0cmluZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNET01Db252ZXJ0U3RyaW5ncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzA0RkUzRTFFNDJGMjFGMDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVtYmVycy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUNvbnZlcnROdW1iZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFM0YxRTQyRjM0MzAwN0ZDQjI0IC8q
IEpTRE9NQ29udmVydFN0cmluZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNET01Db252ZXJ0U3RyaW5ncy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTdDMDRGRTQwMUU0MkY0MUEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnREYXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29udmVydERhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDExRTQyRjRBMjAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydERhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01D
b252ZXJ0RGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTQyMUU0
MkY2M0MwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0SW50ZXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdDMDRGRTQzMUU0MkY3NjgwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRC
dWZmZXJTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252
ZXJ0QnVmZmVyU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTQ0
MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRBbnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0QW55Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdDMDRGRTQ1MUU0M0I1MTEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCb29sZWFuLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29udmVydEJvb2xlYW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDYxRTQzQjUxMTAwN0ZDQjI0IC8q
IEpTRE9NQ29udmVydERpY3Rpb25hcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNET01Db252ZXJ0RGljdGlvbmFyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3QzA0RkU0NzFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0RW51bWVyYXRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNDgxRTQzQjUxMTAwN0ZDQjI0
IC8qIEpTRE9NQ29udmVydE51bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNET01Db252ZXJ0TnVsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzA0RkU0
OTFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVsbGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0TnVsbGFibGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNEExRTQzQjUxMjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVy
dE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRP
YmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNEIxRTQzQjUxMjAw
N0ZDQjI0IC8qIEpTRE9NQ29udmVydFNlcXVlbmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTUNvbnZlcnRTZXF1ZW5jZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0MwNEZFNEMxRTQzQjdDMzAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFJlY29yZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRSZWNvcmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNEQxRTQzQjgwNTAwN0ZDQjI0IC8q
IEpTRE9NQ29udmVydFVuaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RE9NQ29udmVydFVuaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTRF
MUU0M0MxNTIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRDYWxsYmFja3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0Q2FsbGJhY2tzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTRGMUU0M0MyNTAwMDdGQ0IyNCAvKiBKU0RPTUNvbnZl
cnRFdmVudExpc3RlbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9N
Q29udmVydEV2ZW50TGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0Mw
NEZFNTAxRTQzQzI1MDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEpTT04uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0SlNPTi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QzA0RkU1MTFFNDNDMkEyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RE9NQ29udmVydFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzA0RkU1MjFFNDNDMkNCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0VmFyaWFkaWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0VmFyaWFkaWMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwNEZFNTMxRTQzQzJDQjAwN0ZDQjI0
IC8qIEpTRE9NQ29udmVydFdlYkdMLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRE9NQ29udmVydFdlYkdMLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRG
RTU0MUU0M0MyQ0IwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01Db252ZXJ0WFBhdGhOU1Jlc29sdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDMDRGRTU1MUU0M0MzNjQwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnRJbmRleGVkREIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNET01Db252ZXJ0SW5kZXhlZERCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDMTg0M0ZCMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdXRvZmlsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdDMTg0M0ZDMUM4QjcyODMwMDJFQjk3MyAvKiBBdXRvZmlsbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdXRvZmlsbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzFFOTcyNTFBOUY5ODM0MDA3QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25F
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1dG9GaWxs
QnV0dG9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTQwMCw4
ICsxNTQ1NCw2IEBACiAJCQkJNUNERDgzM0MxRTQzMjRCQjAwNjIxRTkyIC8qIFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZS5oICovLAogCQkJCTA3NzA3Q0IxMUUyMDY0OUMwMDAwNUJGNyAvKiBB
dWRpb0NhcHR1cmVTb3VyY2VQcm92aWRlck9iakMuaCAqLywKIAkJCQkwNzcwN0NBRjFFMjA1RUM0
MDAwMDVCRjcgLyogQXVkaW9Tb3VyY2VPYnNlcnZlck9iakMuaCAqLywKLQkJCQkwN0MwNDZDNTFF
NDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbUNvY29hLmNwcCAq
LywKLQkJCQkwN0MwNDZDNjFFNDI1MTJGMDA3MjAxRTcgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRp
YVN0cmVhbUNvY29hLmggKi8sCiAJCQkJMDcwMzYzRDgxODFBMUNEQzAwQzA3NEE1IC8qIEFWQXVk
aW9DYXB0dXJlU291cmNlLmggKi8sCiAJCQkJMDcwMzYzRDkxODFBMUNEQzAwQzA3NEE1IC8qIEFW
QXVkaW9DYXB0dXJlU291cmNlLm1tICovLAogCQkJCTA3MDM2M0RBMTgxQTFDREMwMEMwNzRBNSAv
KiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmggKi8sCkBAIC0yMjI5Myw2ICsyMjM0NSwzMyBAQAog
CQkJCTdDNDVDOUNEMUUzRTkwMEIwMEFBQjU1OCAvKiBKU0RPTUNvbnN0cnVjdG9yLmNwcCAqLywK
IAkJCQk0MTNDMkMzMzFCQzI5QTdCMDA3NTIwNEMgLyogSlNET01Db25zdHJ1Y3Rvci5oICovLAog
CQkJCTkzMDg0MTMzMUNEREIxNTUwMEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLywKKwkJCQk3
QzA0RkU0NDFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0QW55LmggKi8sCisJCQkJN0Mw
NEZFM0IxRTQyRDUwMDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEJhc2UuaCAqLywKKwkJCQk3QzA0
RkU0NTFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0Qm9vbGVhbi5oICovLAorCQkJCTdD
MDRGRTQzMUU0MkY3NjgwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaCAqLywK
KwkJCQk3QzA0RkU0RTFFNDNDMTUyMDA3RkNCMjQgLyogSlNET01Db252ZXJ0Q2FsbGJhY2tzLmgg
Ki8sCisJCQkJN0MwNEZFNDExRTQyRjRBMjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERhdGUuY3Bw
ICovLAorCQkJCTdDMDRGRTQwMUU0MkY0MUEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnREYXRlLmgg
Ki8sCisJCQkJN0MwNEZFNDYxRTQzQjUxMTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydERpY3Rpb25h
cnkuaCAqLywKKwkJCQk3QzA0RkU0NzFFNDNCNTExMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RW51
bWVyYXRpb24uaCAqLywKKwkJCQk3QzA0RkU0RjFFNDNDMjUwMDA3RkNCMjQgLyogSlNET01Db252
ZXJ0RXZlbnRMaXN0ZW5lci5oICovLAorCQkJCTdDMDRGRTU1MUU0M0MzNjQwMDdGQ0IyNCAvKiBK
U0RPTUNvbnZlcnRJbmRleGVkREIuaCAqLywKKwkJCQk3QzA0RkU0MjFFNDJGNjNDMDA3RkNCMjQg
LyogSlNET01Db252ZXJ0SW50ZXJmYWNlLmggKi8sCisJCQkJN0MwNEZFNTAxRTQzQzI1MDAwN0ZD
QjI0IC8qIEpTRE9NQ29udmVydEpTT04uaCAqLywKKwkJCQk3QzA0RkU0ODFFNDNCNTExMDA3RkNC
MjQgLyogSlNET01Db252ZXJ0TnVsbC5oICovLAorCQkJCTdDMDRGRTQ5MUU0M0I1MTEwMDdGQ0Iy
NCAvKiBKU0RPTUNvbnZlcnROdWxsYWJsZS5oICovLAorCQkJCTdDMDRGRTNFMUU0MkYyMUYwMDdG
Q0IyNCAvKiBKU0RPTUNvbnZlcnROdW1iZXJzLmNwcCAqLywKKwkJCQk3QzA0RkUzQzFFNDJENTAw
MDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVtYmVycy5oICovLAorCQkJCTdDMDRGRTRBMUU0M0I1
MTIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRPYmplY3QuaCAqLywKKwkJCQk3QzA0RkU0QzFFNDNC
N0MzMDA3RkNCMjQgLyogSlNET01Db252ZXJ0UmVjb3JkLmggKi8sCisJCQkJN0MwNEZFNEIxRTQz
QjUxMjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFNlcXVlbmNlcy5oICovLAorCQkJCTdDMDRGRTUx
MUU0M0MyQTIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCAq
LywKKwkJCQk3QzA0RkUzRjFFNDJGMzQzMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5ncy5j
cHAgKi8sCisJCQkJN0MwNEZFM0QxRTQyRDUwMDAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFN0cmlu
Z3MuaCAqLywKKwkJCQk3QzA0RkU0RDFFNDNCODA1MDA3RkNCMjQgLyogSlNET01Db252ZXJ0VW5p
b24uaCAqLywKKwkJCQk3QzA0RkU1MjFFNDNDMkNCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0VmFy
aWFkaWMuaCAqLywKKwkJCQk3QzA0RkU1MzFFNDNDMkNCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0
V2ViR0wuaCAqLywKKwkJCQk3QzA0RkU1NDFFNDNDMkNCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0
WFBhdGhOU1Jlc29sdmVyLmggKi8sCiAJCQkJN0M0NUM5Q0MxRTNFOEYwODAwQUFCNTU4IC8qIEpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwICovLAogCQkJCTdDNDVDOUM3MUUzRThBRkYwMEFBQjU1
OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggKi8sCiAJCQkJRTFDMzZDQkMwRUIwODA2MjAw
NzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCAqLywKQEAgLTI1MTgwLDYgKzI1MjU5LDcg
QEAKIAkJCQk1MTJERDhGODBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlQ29sbGVj
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1Njg2Q0ExM0FDMTgwMjAwQjY5QzY4IC8qIEFz
eW5jQXVkaW9EZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUNERTkyMjE1MDE5MTY5MDA4
NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU2QzFF
NDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0U3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGRDRENjExODY1MUZBMzAwNTEyRjZFIC8qIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QzRBODBEMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEM0QTgwQjA5RDU2MzI3MDAwM0FDOEQgLyogQXR0cmlidXRl
LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzAxLDYgKzI1MzgxLDcgQEAKIAkJCQlGNTVCM0RCMDEy
NTFGMTJEMDAzRUYyNjkgLyogQnV0dG9uSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTU2OUNGODBEN0UyQjgyMDA3QzM5ODMgLyogY19jbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE1NjlDRkEwRDdFMkI4MjAwN0MzOTgzIC8qIGNfaW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdDMDRGRTU2MUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRBbnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFBNTY5Q0ZDMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3J1bnRpbWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFBNTY5Q0ZFMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0aWxpdHkuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQjE2QzFBMDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRDU1NT
dHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzMyLDYgKzI1NDEzLDcgQEAKIAkJCQlG
QjJDMTVDMzE2NUQ2NDlEMDAzOUM5RjggLyogQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTFDMDkzOUVCMUExM0UxMjkwMEI3ODhFNSAvKiBDYWNoZWRTVkdG
b250LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzUzODYwMzE0NDg5RTk4MDBCNzg0NTIgLyogQ2Fj
aGVkVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU1QTFFNDNENTJBMDA3RkNC
MjQgLyogSlNET01Db252ZXJ0Q2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IxNkMy
ODA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMTk5NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI1MzY0LDYgKzI1NDQ2LDcgQEAKIAkJCQlGRDMxNUZGRjEyQjAy
Njc2MDBDMUEzNTkgLyogQ2hhbm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZE
MzE2MDAyMTJCMDI2NzYwMEMxQTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNjkxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVy
dFNlcXVlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzU1OTJGNzgxQTkyQUEyODAwMUY4ODYy
IC8qIENoYXJhY3RlclByb3BlcnRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QjhGRkQxMTZB
RTdGOTYwMDM4Mzg4RCAvKiBDaGFyYWN0ZXJSZWZlcmVuY2VQYXJzZXJJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREEyQTBEMDA2QzFEMDBFRjZGMjYgLyogQ2hhcnNldERhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtMjU1MjcsNiArMjU2MTAsNyBAQAogCQkJCUJDRUE0NzkwMDk3Q0FB
QzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTlEQUM3QzU1MUFGMkNBQTIwMDQzN0M0NCAvKiBDU1NDb250ZW50RGlzdHJpYnV0aW9u
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOEZFQkREMTQzRTNFRjcwMDcyNTAyQiAvKiBD
U1NDcm9zc2ZhZGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNTcxRTQzRDUyQTAw
N0ZDQjI0IC8qIEpTRE9NQ29udmVydEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUFBMjFFQ0NE
MEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NDQ0Q0JFNDFEODg2MTk5MDA3M0EwNzQgLyogQ1NTQ3VzdG9tSWRlbnRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDczQjg3NjkxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTY1Miw2ICsyNTczNiw3IEBACiAJCQkJ
QTU3MzJCMEIxMzZBMTYxRDAwNUM4RDdDIC8qIERhdGVDb21wb25lbnRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNTVCM0RCNjEyNTFGMTJEMDAzRUYyNjkgLyogRGF0ZUlucHV0VHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDUzRUI2MzcxNTlDNTcwNDAwMDAxQkI3IC8qIERhdGVUaW1lRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU3MDFFNDNENTJCMDA3RkNCMjQgLyogSlNET01D
b252ZXJ0WFBhdGhOU1Jlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RCODEyNTFG
MTJEMDAzRUYyNjkgLyogRGF0ZVRpbWVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1
NUIzREJBMTI1MUYxMkQwMDNFRjI2OSAvKiBEYXRlVGltZUxvY2FsSW5wdXRUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjZBMTJCRTFBMDA5MjM3MDBDNkRFNzIgLyogRGVidWdQYWdlT3Zlcmxh
eXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjU2ODYsNiArMjU3NzEsNyBAQAogCQkJCTMxNDAzNzlE
MTI0QkVBN0YwMEFGNDBFNCAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudElPUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTkzMDlBMTMxMUY0QUU2QTAwMjUwNjAzIC8qIERldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTlBOEYxRDYxMUE2OTUxMzAwMUFDMzRB
IC8qIERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0Mw
NEZFNjMxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydE51bGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU5MEUxQjQ5MTFFNEVGNEIwMDY5Rjc4NCAvKiBEZXZpY2VPcmllbnRhdGlvbkRhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTU5QTg1RUE0MTE5RDY4RUMwMERFRjFFRiAvKiBEZXZpY2VP
cmllbnRhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjc3MjVGRDFBNUIzQUQ5MDAz
QzI0REQgLyogREZBLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NzMyLDYgKzI1ODE4LDcgQEAKIAkJ
CQk0QTRGNDhBQTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUQ2RTcxQUQxNjY4ODk5RDAwMzIwQzEzIC8qIERvY3VtZW50U2hhcmVkT2Jq
ZWN0UG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEI5MDU2MUEwRjI1NzhCRjAwOTVGRjZBIC8q
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNUYx
RTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTEyMjFFMDRCMUJGQzNEMkMwMDZBMUEwMCAvKiBEb2N1bWVudFRpbWVsaW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkQ5ODJGNzEyNUMxNTQwMDBBRDlFM0QgLyogRG9jdW1lbnRU
aW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTg1RjM5MDk3NjU3NjYwMDU4MjZEOSAvKiBE
b2N1bWVudFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU4NDQsNiArMjU5MzEsNyBAQAogCQkJ
CTI2MkVDNDFBMUQwNzhGQjkwMEJBNzhGQyAvKiBFdmVudFRyYWNraW5nUmVnaW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTNEMTk2MzMxRDZDQUI4MjAwRkM3RTQ3IC8qIEV4Y2VwdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM2MEQ4RjMwRDJBMTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJh
c2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDRGRTZFMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RP
TUNvbnZlcnRWYXJpYWRpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1RkJDRjIwOUJBMTQzQjAw
RTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3M0RDNjQwMTQ1
QTk0MDkwMDI4NDJDMiAvKiBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3NjdDRTBCMTQ1QUJDMTMwMDVFNjREQiAvKiBFeGNlcHRpb25IZWFkZXJzLmggaW4g
SGVhZGVycyAqLywKQEAgLTI2MTA4LDYgKzI2MTk2LDcgQEAKIAkJCQlBODEzNjlEQzA5NzM3NEY2
MDBENzQ0NjMgLyogSFRNTE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MTM2
OURBMDk3Mzc0RjYwMEQ3NDQ2MyAvKiBIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBRDAxMDA5MTI3RTY0MkEwMDE1MDM1RiAvKiBIVE1MT3V0cHV0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNjcxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThFQTdDQjUwQTE5MkI5QzAwQThFRjVG
IC8qIEhUTUxQYXJhZ3JhcGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODcxRDQ1ODBB
MTI3Q0JDMDBCMTJBNjggLyogSFRNTFBhcmFtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTNFMkEzMDcxMjNFOURDMDAwOUZFMTJBIC8qIEhUTUxQYXJzZXJJZGlvbXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjYyMjcsNiArMjYzMTYsNyBAQAogCQkJCUIyNzUzNTcwMEIwNTM4MTQwMDJDRTY0
RiAvKiBJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3
IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgx
OEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDRGRTVE
MUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnREaWN0aW9uYXJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJ
bWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI4Myw2
ICsyNjM3Myw3IEBACiAJCQkJOTMzMDlERjAwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydFBhcmFn
cmFwaFNlcGFyYXRvckNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5REYyMDk5RTY0
OTIwMDU2RTU4MSAvKiBJbnNlcnRUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjg4
NUU4RDUxMUUwNkREMjAwOUZGQkY0IC8qIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNjIxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29u
dmVydEpTT04uaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUwNyAv
KiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMzMDgw
MDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MkFC
MTc0NDEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMjcyNDcsNiArMjczMzgsNyBAQAogCQkJCUM2RjA4RkJEMTQzMEZFOEYwMDY4NTg0OSAv
KiBNdXRhdGlvblJlY29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCNkM5QzYxNUUzRjRERjAw
NjkwQjA1IC8qIE5hbWVkRmxvd0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxNEJF
M0E3MUIzMTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTdDMDRGRTY2MUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnROdW1i
ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIyMzA5NzdEM0MwMDA1ODI2RDkgLyogTmFt
ZWROb2RlTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODE4NzIxRTA5NzdEM0MwMDA1ODI2RDkg
LyogTmFtZU5vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2QjM0ODA5NDBFRUY1MEQ0MDBB
QzFCNDEgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0OTMsNiArMjc1ODUs
NyBAQAogCQkJCUU0NDYxM0VDMENENjgxQjUwMEZBREE3NSAvKiBQcm9ncmVzc0V2ZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzE1RTY1MzEzNEJCQkVDMDBEOEU3MTMgLyogUHJvZ3Jlc3NTaGFk
b3dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTJBNjgyNDBCNUJFREU3MDAwMkE0ODAg
LyogUHJvZ3Jlc3NUcmFja2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU1RTFFNDNENTJB
MDA3RkNCMjQgLyogSlNET01Db252ZXJ0RW51bWVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFBQ0FERDc5MTg4MEQ5MUMwMEQ4QjcxRCAvKiBQcm9ncmVzc1RyYWNrZXJDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0QkJFRDBGMTRGNDAyNUQwMDNGMEI5OCAvKiBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTM3QkFBRTU4MTk4MEQxREQw
MDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjc1NjMsNiAr
Mjc2NTYsNyBAQAogCQkJCTgzNkRBQTA2MUNFQUI4MEQwMEEyQjcwNyAvKiBSZW5kZXJEZXNjZW5k
YW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUQzMDI3NTRBMTJBNUZFODQwMDRCRDgy
OCAvKiBSZW5kZXJEZXRhaWxzTWFya2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZFNUY3RjEz
NUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJN0MwNEZFNjAxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEluZGV4ZWREQi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOUIzMkNEQTkxM0RGN0ZBOTAwRjM0RDEzIC8qIFJlbmRlcmVk
UG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUU0M0EwMjNCMTdFQjM3MEEwMDRDREQyNSAv
KiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCN0E1NTEwRjY1RDdBMDAz
NzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjc3Mjgs
NiArMjc4MjIsNyBAQAogCQkJCUFEQkFENkVGMUJDREQ5NTcwMDM4MTMyNSAvKiBSZXNvdXJjZVVz
YWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUwNzFFODcxQzU2RDBFMTAwOTk1MUJF
IC8qIFJlc291cmNlVXNhZ2VUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE1MTJC
MDI2RjcwMEMxQTM1OSAvKiBSZXZlcmIuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDRGRTYxMUU0
M0Q1MkEwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZEMzE2MEE3MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJBY2N1bXVsYXRpb25CdWZmZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEE5MTJCMDI2RjcwMEMxQTM1OSAvKiBSZXZlcmJD
b252b2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MEFCMTJCMDI2RjcwMEMxQTM1OSAv
KiBSZXZlcmJDb252b2x2ZXJTdGFnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzc0Niw2ICsyNzg0
MSw3IEBACiAJCQkJMDc4RTA5MjAxN0QxNEQxQzAwNDIwQUExIC8qIFJUQ0RUTUZTZW5kZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3OEUwOTNFMTdEMTZFMUMwMDQyMEFBMSAvKiBSVENEVE1GU2Vu
ZGVySGFuZGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5M0YxN0QxNkUxQzAwNDIwQUEx
IC8qIFJUQ0RUTUZTZW5kZXJIYW5kbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0
RkU1OTFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNzhFMDkyMTE3RDE0RDFDMDA0MjBBQTEgLyogUlRDRFRNRlRvbmVDaGFu
Z2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5MjMxN0QxNEQxQzAwNDIwQUExIC8q
IFJUQ0ljZUNhbmRpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RTA5NDAxN0QxNkUxQzAw
NDIwQUExIC8qIFJUQ0ljZUNhbmRpZGF0ZURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
Mjc4NDIsNyArMjc5MzgsNyBAQAogCQkJCTFBQUFEREU0MTREQzhDOEYwMEFGNjRCMyAvKiBTY3Jv
bGxpbmdUcmVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTNFODAxOTFCMzE2OTAwMEYx
QjU1IC8qIFNjcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTkzOTFBOTlEMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDdDMDQ2QzgxRTQyNTE1NTAwNzIwMUU3IC8qIEF1
ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW1Db2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDdD
MDQ2QzgxRTQyNTE1NTAwNzIwMUU3IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTBGQjg4
OTBBMTY3RDJGQTEwMDEwQ0RBNSAvKiBTY3JvbGxpbmdUcmVlU3RpY2t5Tm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0FBRkU4RDAxOUNCODY3MjAwMEY1NkQ4IC8qIFNjcm9sbExhdGNoaW5nU3Rh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Nzg3NTU0MTk5ODNBRkYwMDI0QTI4NyAvKiBTY3Jv
bGxTbmFwQW5pbWF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg5Myw2ICsyNzk4OSw3
IEBACiAJCQkJRkQ0NUE5NEYxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRDQ1QTk1QjE3NUQ0MUVFMDBDMjFFQzggLyogU2hhcGVJbnRlcnZhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkQ0NUE5NTIxNzVEM0YzRTAwQzIxRUM4IC8qIFNoYXBlT3V0c2lkZUlu
Zm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDRGRTY0MUU0M0Q1MkEwMDdGQ0IyNCAvKiBKU0RP
TUNvbnZlcnROdWxsYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAw
QzZENEY3IC8qIFNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURD
Q0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QjFGMDJG
MTNCMDI1RDIwMEY1MTAzRiAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yODAxNSw2ICsyODExMiw3IEBACiAJCQkJQkM1RUI3NEUwRTgxRTA2NzAwQjI1OTY1
IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNERBQ0U2QTFEMTJF
MTBCMDA3NTk4MEYgLyogU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3QzQ1QzlENjFFM0ZDQkY4MDBBQUI1NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNUMxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVy
dERhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2REZDMEExOTkwNjcwMDdGQjhDNSAvKiBT
dHlsZVByb3BlcnRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjI1MTA3MTUyQTBCQjAwMDY5
Qjc3OSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0Mw
NUE1QjFBNjg2MjEyMDA3RTVERUEgLyogU3R5bGVQcm9wZXJ0eVNob3J0aGFuZEZ1bmN0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODE0MSw2ICsyODIzOSw3IEBACiAJCQkJQjIyMjdBMEYwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBMTIwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpdFRvVmll
d0JveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMUYyQUIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNW
R0ZvbnRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzA0RkU2RDFFNDNENTJCMDA3RkNC
MjQgLyogSlNET01Db252ZXJ0VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTE1MEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdGb250RmFjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3QTE4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250RmFjZUZvcm1hdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QTFCMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250RmFj
ZU5hbWVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI4NTMzLDYgKzI4NjMyLDcgQEAKIAkJ
CQlBMTQ4MzJDQzE4N0Y2N0M0MDBEQTYzQTYgLyogV2ViQ29yZVRocmVhZFJ1bi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTE0ODMyQ0QxODdGNjgyRTAwREE2M0E2IC8qIFdlYkNvcmVUaHJlYWRTYWZl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDRjE4N0Y2ODQ3MDBEQTYzQTYgLyogV2ViQ29y
ZVRocmVhZFN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0MwNEZFNkYxRTQz
RDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFdlYkdMLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjA5OUQwOTE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NEEyMERCOTBGODQxNjZDMDBCM0UxRkUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlSU9TLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NjA4LDYgKzI4
NzA4LDcgQEAKIAkJCQlDREEyOUEwRjFDQkQ5Q0ZFMDA5MDFDQ0YgLyogV2ViUGxheWJhY2tTZXNz
aW9uTW9kZWxNZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5Q0MwQjZCMThCRUEx
RkYwMDZDRUJDQyAvKiBXZWJSZXBsYXlJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYz
NDgxMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTdDMDRGRTZBMUU0M0Q1MkIwMDdGQ0IyNCAvKiBKU0RPTUNvbnZlcnRTZXJpYWxpemVkU2Ny
aXB0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFDQUYzNDgzMEE2QzQwNTIwMEFCRTA2RSAv
KiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxQjBE
N0UyQjgyMDA3QzM5ODMgLyogV2ViU2NyaXB0T2JqZWN0UHJvdG9jb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3QUFCRDFCMTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjg2NjEsMTEgKzI4NzYyLDEzIEBACiAJCQkJQTU1NjM5RDExQzZGMDlFMzAwODA2
RDhFIC8qIFdvcmtlckNvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MkE2ODY2
MURCRDRCNUQwMDgzMzczRiAvKiBXb3JrZXJEZWJ1Z2dlckFnZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBM0UyNjQzMTE0NzQ4OTkxMDA1QTg1ODggLyogV29ya2VyRXZlbnRRdWV1ZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJN0MwNEZFNjgxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydFJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkU0MzQ2NDkwRjU0NkE4MjAwQjBGMUJBIC8qIFdv
cmtlckdsb2JhbFNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkNCNDFCQjRDNEU4MDAx
Mjg5OEYgLyogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk3RjhFNjY2MTUxRDRBNEUwMEQyRDE4MSAvKiBXb3JrZXJHbG9iYWxTY29wZU5vdGlm
aWNhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJFNDM0NjRCMEY1NDZBODIwMEIwRjFCQSAv
KiBXb3JrZXJHbG9iYWxTY29wZVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRBMEM2MjFE
QjdGOEMxMDAxN0E5MEIgLyogV29ya2VySW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJN0MwNEZFNTgxRTQzRDUyQTAwN0ZDQjI0IC8qIEpTRE9NQ29udmVydEJvb2xlYW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1NEEwQzZDMURCODMxRjkwMDE3QTkwQiAvKiBXb3JrZXJJ
bnNwZWN0b3JQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMThGODMxQjgwRkQ0OEM3ODAwRDhD
NTZCIC8qIFdvcmtlckxvYWRlclByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRTQzNDY0RDBG
NTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjkz
OTAsNiArMjk0OTMsNyBAQAogCQkJCUUxMjVGODYzMTgyQzMwM0EwMEQ4NENEOSAvKiBDcnlwdG9L
ZXlEYXRhT2N0ZXRTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUMyNjZERTE4MzE5
RjMxMDAzRjhCMzMgLyogQ3J5cHRvS2V5RGF0YVJTQUNvbXBvbmVudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTEyNUY4MzUxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0b0tleUhNQUMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJN0MwNEZFNkIxRTQzRDUyQjAwN0ZDQjI0IC8qIEpTRE9NQ29udmVy
dFN0cmluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE5QUMzRjkxODI1NjZGNzAwMzQ5NDI2
IC8qIENyeXB0b0tleU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1N0UyMzM2QjFEQ0MyNjI0
MDBGMjhEMDEgLyogQ3J5cHRvS2V5UlNBLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNjRGQUE1
MTgzMTVFMUEwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0FNYWMuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0yOTUyMSw2ICsyOTYyNSw3IEBACiAJCQkJRkQwNkRGQTUxMzRBNERFRjAwNkY1RDdEIC8qIERl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAy
QjEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlEU1BLZXJuZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRkQzMTYwMkQxMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5Tm9kZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk3QzA0RkU1QjFFNDNENTJBMDA3RkNCMjQgLyogSlNET01Db252ZXJ0RGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAzMDEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlQcm9j
ZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlEREUwOTlFNjQ5MjAwNTZFNTgxIC8q
IERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlE
RTAwOTlFNjQ5MjAwNTZFNTgxIC8qIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0zMDc1Nyw2ICszMDg2Miw3IEBACiAJCQkJMDc4NDYzNDIxNDVCMTUxQTAwQTU4
REYxIC8qIEpTVHJhY2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTdCNDkyMjE2QTlC
OEZGMDAxQzg4MzkgLyogSlNUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUE3NTBENUMwQTkwREVFMTAwMEZGMjE1IC8qIEpTVHJlZVdhbGtlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk3QzA0RkU2NTFFNDNENTJCMDA3RkNCMjQgLyogSlNET01Db252ZXJ0TnVtYmVycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTZCQjc5NDBDRTkxRTY4MDA1MTJGNzkgLyogSlNUcmVl
V2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4NjYyOUQwMDlEQTJCNDgwMDk2
MzNBNSAvKiBKU1VJRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDY1MzA3RDExREI2RUU0
QTAwRTQxMzdDIC8qIEpTVUlFdmVudEluaXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMjEwMyw3
ICszMjIwOSw3IEBACiAJCQkJNDlDN0I5RTUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVy
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Rjk5NUEyMzFBNzA3OEIxMDBBNzM1RjQgLyogV2Vi
R0xUcmFuc2Zvcm1GZWVkYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwQzNGMUY1QTEwQzg4
NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0J
CQkJMDdDMDQ2QzcxRTQyNTE1NTAwNzIwMUU3IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJl
YW1Db2NvYS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwN0MwNDZDNzFFNDI1MTU1MDA3MjAxRTcg
LyogKG51bGwpIGluIFNvdXJjZXMgKi8sCiAJCQkJNkY5OTVBMjUxQTcwNzhCMTAwQTczNUY0IC8q
IFdlYkdMVmVydGV4QXJyYXlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNkYyMjJCNzYx
QUI1MkQ4QTAwOTQ2NTFBIC8qIFdlYkdMVmVydGV4QXJyYXlPYmplY3RCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTc3QTE3QTc3MTJGMjg2NDIwMDRFMDJGNiAvKiBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIxMTY1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKIAogI2luY2x1ZGUgIklEQkluZGV4SW5mby5oIgpAQCAtMTUxLDggKzE1MiwxMSBAQCBz
dGF0aWMgUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhCiAgICAgaWYgKHZhbHVlLmlz
U3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmluZyhhc1N0cmluZyh2
YWx1ZSktPnZhbHVlKCZleGVjKSk7CiAKLSAgICBpZiAodmFsdWUuaW5oZXJpdHModm0sIERhdGVJ
bnN0YW5jZTo6aW5mbygpKSAmJiAhc3RkOjppc25hbih2YWx1ZVRvRGF0ZSgmZXhlYywgdmFsdWUp
KSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZSgmZXhlYywg
dmFsdWUpKTsKKyAgICBpZiAodmFsdWUuaW5oZXJpdHModm0sIERhdGVJbnN0YW5jZTo6aW5mbygp
KSkgeworICAgICAgICBhdXRvIGRhdGVWYWx1ZSA9IHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVlKTsK
KyAgICAgICAgaWYgKCFzdGQ6OmlzbmFuKCFkYXRlVmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IElEQktleTo6Y3JlYXRlRGF0ZShkYXRlVmFsdWUpOworICAgIH0KIAogICAgIGlmICh2YWx1ZS5p
c09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7
CkBAIC00MTUsMTkgKzQxOSw2IEBAIHZvaWQgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKEV4ZWNT
dGF0ZSYKICAgICBvdXRLZXkgPSBJbmRleEtleShXVEZNb3ZlKGtleURhdGFzKSk7CiB9CiAKLUpT
VmFsdWUgdG9KUyhFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBzdGQ6Om9wdGlvbmFsPElEQktleVBhdGg+JiBrZXlQYXRoKQotewotICAgIGlm
ICgha2V5UGF0aCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotCi0gICAgYXV0byB2aXNpdG9y
ID0gV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIC0+IEpTVmFsdWUg
ewotICAgICAgICByZXR1cm4gdG9KUzxJRExET01TdHJpbmc+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0cmluZyk7Ci0gICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpIC0+IEpT
VmFsdWUgewotICAgICAgICByZXR1cm4gdG9KUzxJRExTZXF1ZW5jZTxJRExET01TdHJpbmc+Pihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2ZWN0b3IpOwotICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZp
c2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAkocmV2aXNpb24g
MjExNjU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMCArNDUsNyBAQCBjbGFzcyBJREJLZXlEYXRhOwog
Y2xhc3MgSURCVmFsdWU7CiBjbGFzcyBJbmRleEtleTsKIGNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0
OwotY2xhc3MgVGhyZWFkU2FmZURhdGFCdWZmZXI7CiAKLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBv
bmNlIHdlIHN1cHBvcnQgcmV0dXJuaW5nIHVuaW9uIHR5cGVzLgotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
SURCS2V5UGF0aD4mKTsKIAogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpKU1ZhbHVlJiwg
Y29uc3QgSURCS2V5UGF0aCYpOwogYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUo
SlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3Bw
CShyZXZpc2lvbiAyMTE2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0
b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU0NyeXB0by5oIgogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmgiCiAjaW5jbHVkZSAiSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3
Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDcnlwdG9PcGVyYXRpb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRhdGEuY3BwCShyZXZpc2lvbiAy
MTE2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b09wZXJhdGlvbkRh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1VC
VExFX0NSWVBUTykKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29udmVydEJ1ZmZlclNvdXJjZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIx
MTY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDE2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKICNpbmNs
dWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNl
cklkaW9tcy5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
RGF0ZUluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApA
QCAtNTYsOTkgKzQ3LDYgQEAgSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSog
ZQogICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKIH0KIAotc3RhdGljIGlu
bGluZSBTdHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5jb250
YWluc09ubHlMYXRpbjEoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQot
Ci1TdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmlu
ZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhz
dGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvQnl0ZVN0
cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJp
bmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaGFzVW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgLy8gRmFz
dCBwYXRoIGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMu
Ci0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZv
ciAoYXV0byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChV
X0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9V
U1ZTdHJpbmcoU3RyaW5nJiYgc3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNh
c2Ugd2hlcmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgaWYgKCFoYXNV
bnBhaXJlZFN1cnJvZ2F0ZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCi0gICAg
Ly8gU2xvdyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4t
dW5pY29kZQotICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVw
bGFjZW1lbnQgY2hhcmFjdGVyLgotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3Vs
dC5yZXNlcnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmdWaWV3IHZpZXcg
eyBzdHJpbmcgfTsKLSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkp
IHsKLSAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0
LnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRl
JiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0g
aWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92
ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2
YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsK
LX0KLQotSlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Ci19Ci0KLWRvdWJsZSB2YWx1
ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOwotICAgIGlmICgh
dmFsdWUuaW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5p
bnRlcm5hbE51bWJlcigpOwotfQotCiBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKQEAgLTE2NiwzMTcgKzY0LDQgQEAgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4
ZWNTdGF0ZSYgcwogICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZmZjsKLXN0YXRpYyBjb25z
dCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOwotc3RhdGljIGNvbnN0IHVpbnQz
Ml90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKLXN0YXRpYyBjb25zdCBpbnQ2NF90IGtKU01h
eEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBp
bnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0LgotCi1zdGF0aWMgU3Ry
aW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUgbWluLCBkb3VibGUgbWF4
KQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJpbmc6Om51bWJlclRvU3Ry
aW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6
bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmluZzo6bnVtYmVyVG9TdHJp
bmdFQ01BU2NyaXB0KG1heCksICJdIik7Ci19Ci0KLXN0YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91YmxlIG1heGlt
dW0pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5m
KHgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JT
dHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgeCA9IHRydW5jKHgpOwotICAgIGlmICh4IDwgbWluaW11bSB8fCB4ID4gbWF4aW11bSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgs
IG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biB4OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzIHsK
LX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQ4X3Q+IHsKLSAgICBz
dGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKLSAgICBzdGF0aWMgY29uc3QgaW50
OF90IG1heFZhbHVlID0gMTI3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZh
bHVlcyA9IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1p
dHM8dWludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1heFZhbHVlID0gMjU1Owot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Ci19
OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50MTZfdD4gewotICAgIHN0
YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKLSAgICBzdGF0aWMgY29uc3Qgc2hv
cnQgbWF4VmFsdWUgPSAzMjc2NzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBl
TGltaXRzPHVpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1heFZh
bHVlID0gNjU1MzU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0g
NjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGlu
ZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50
ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc2lnbmVkIGludGVncmFs
IHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0g
ICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHNpZ25lZCBp
bnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0g
ICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPj0gTGlt
aXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIGQg
PCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWluVmFsdWUgOiBMaW1pdHNU
cmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVt
YmVyT2ZWYWx1ZXM7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkID4gTGltaXRzVHJh
aXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IGQpOwotICAg
IH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0
OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwg
c3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0geCA8IDAg
PyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICB4ID0gZm1vZCh4LCBMaW1p
dHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgg
PiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVz
IDogeCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRvU21h
bGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8
VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWduZWQgaW50ZWdyYWwgdHlw
ZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAv
LyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50
ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpIHsKLSAg
ICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChkIDw9IExp
bWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihk
KTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gTGltaXRzVHJhaXQ6
Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VS
YW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4o
eCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0g
eCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpKTsKLX0KLQot
aW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50
OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQ4
X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50OF90IHRvVUludDhDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1i
eXRlCi1pbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9XZWJJREwvI2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotaW50
MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDE2X3Qg
dG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDE2X3QgdG9J
bnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtc2hvcnQKLWludDE2
X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtdW5zaWduZWQtc2hvcnQKLXVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQot
Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKLWludDMyX3QgdG9JbnQz
MkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFz
SW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Ci19Ci0KLWludDMyX3QgdG9JbnQzMkNsYW1w
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBj
bGFtcFRvPGludDMyX3Q+KHgpOwotfQotCi11aW50MzJfdCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88
dWludDMyX3Q+KHgpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVu
c2lnbmVkLWxvbmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
MCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7Ci19
Ci0KLWludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0
dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01heEludGVnZXIp
OwotfQotCi11aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0g
ICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdlcik7Ci19Ci0K
LWludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJu
IHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91Ymxl
PihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOwot
fQotCi11aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWlu
PGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50ZWdlcikpOwotfQotCi0v
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZwotaW50NjRfdCB0b0lu
dDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5
IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19
Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZy1sb25n
Ci11aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5z
IGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQu
Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwot
ICAgIHJldHVybiBuOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMjExNjU5KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDI0ICsyOSwxOCBAQAogI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KICNpbmNs
dWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxp
YXJ5QmFycmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9u
cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNU
eXBlZEFycmF5cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi0vLyBGSVhNRTogV2UgY291bGQg
bWFrZSB0aGlzIGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwgZnVuY3Rp
b24gZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AsCi0vLyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMg
YmVsb3csIGV2ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgotCiBuYW1lc3Bh
Y2UgSlNDIHsKIGNsYXNzIEpTRnVuY3Rpb247CiB9CkBAIC02MSwxMjEgKzU1LDIyIEBAIEpTQzo6
SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXgKIC8vIG9iamVjdCwgdG8gbGV0IHRo
ZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5s
aWtlbHkgdG8gc2F2ZSBtZW1vcnkuCiBKU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChK
U0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCi1TdHJpbmcgcHJvcGVydHlOYW1lVG9T
dHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlk
ZW50aWZpZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRv
VVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJD
T1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRv
IGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBUaGUgY29udmVy
c2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBv
ciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRl
IHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1XRUJDT1JFX0VY
UE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZF
bmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUlu
dDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0
b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9S
VCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1X
RUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQz
Ml90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3Qg
dG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1
aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZh
bHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRl
LgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLQot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpT
Qzo6QXJyYXlCdWZmZXImKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7Ci1KU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZl
ciopOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKLQotUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJW
aWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJ
bnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpT
Qzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
RmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotCi1SZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50
MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+
IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpT
Qzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBl
ZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+
IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxK
U0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5z
aGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVN0cmluZyBwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCiBXRUJDT1JFX0VYUE9S
VCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
IAotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVk
SlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLQotLy8gSW5saW5lIGZ1
bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCi0KLWlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBn
ZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rp
b24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4KLSAgICByZXR1
cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+
YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKLX0K
LQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmlldykK
LXsKLSAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QpOwotfQotCi1pbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoraW5saW5lIFN0cmluZyBwcm9wZXJ0
eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYg
KCF2aWV3KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSk7CisgICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51
aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgcHRyKQoraW5saW5lIEF0b21pY1N0
cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkp
OworICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlO
YW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQordGVtcGxh
dGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpF
bmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKIHsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7
CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQpA
QCAtMTkyLDc1ICs4Nyw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFs
dWUKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsKLSAgICBK
U0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0K
LSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1l
JiBwcml2YXRlTmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52
bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1
ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNh
c3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVy
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlT
aGFyZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRv
VW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0s
IHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQdHI8
SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQx
NkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9V
bnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZh
bHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5s
aW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6
OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFy
cmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRh
cHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9V
bnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZh
bHVlKTsgfQotCi1pbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJv
bCgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgp
IDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZyBw
cm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0
eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8
SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKLXsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydC5oCShyZXZpc2lvbiAyMTE2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTg3NiArMjUsMjUgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8
cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05P
YmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb252ZXJzaW9uIGZyb20gSlNW
YWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3Jt
YWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRo
cm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkg
Y29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewot
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZl
cnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxV
PiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5
IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUg
PSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJs
b2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9h
ZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZl
cnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFz
RXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYg
dmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAg
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRv
SlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0g
ICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxh
YmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsK
LSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJu
VHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6
TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBl
KFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMg
YmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0
cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8v
IHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1
cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwot
ICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3
aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxh
YmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwg
dHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7
Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6
Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRy
X3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAg
c3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0
LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7
Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsK
LQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFy
cmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4g
ewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6Okdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZh
bHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0
aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0K
LX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHAp
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsg
fQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8
VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2Vy
IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0
YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0
dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0lu
dDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNo
b3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExv
bmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
PiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGlj
IGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAg
ICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRp
YyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZs
b2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAg
ICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlu
bGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0
YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVt
YmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6
OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
ewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJl
cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVh
dE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmlu
Zz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYg
KGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0
cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0g
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9i
amVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ry
b25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8
dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCog
anNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAg
ICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpT
Qzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMg
YW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBl
cywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0g
ICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3Vt
ZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2Vx
dWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBK
U0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2Jq
ZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6
YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCkt
PmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
LQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAg
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRo
ZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5k
ZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjpp
c25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0
KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+
IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExv
bmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxV
LCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQot
ICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1l
bnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIs
ICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3Rv
cikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBl
bGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhl
YywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9i
amVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZl
cnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0g
ICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmll
cik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFt
ZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExS
ZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlw
ZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVu
YW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVt
cHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBp
cyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAg
ICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4K
LSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3Qo
dmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAg
Ly8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRl
LCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1l
bnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0
eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXRE
ZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAy
LiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1
ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hl
Y2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUg
ZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAg
aWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1l
cmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29u
dmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0
eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwg
a2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkp
LgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtl
eSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQot
ICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0
byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1
ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1
bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3Rl
OiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5
cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlw
ZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0
Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBm
b3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJl
IGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5v
dGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQot
ICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAg
ICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQg
dmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVh
dGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAg
ICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAg
ICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4g
UmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0
aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0
aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMg
UmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAg
ICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxU
Pj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29u
c3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNr
SW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4K
LXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBU
Pgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7Ci0g
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0g
ICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3Qs
IHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9p
ZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4K
LXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJv
bnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9u
PFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5
cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6
XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwg
bnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcs
IGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJp
bmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlz
dCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+
PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
LSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxp
c3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJp
Z2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25k
aXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERp
Y3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250
PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVj
b3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdh
bmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlw
ZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRU
eXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
T2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4g
MDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlv
biB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5l
ZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51
bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQg
dHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0g
ICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgot
ICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgot
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAg
ICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAg
ICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
NC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBW
LgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVy
biB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAg
ICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0
LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJy
aWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5
cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNl
VHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5W
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJl
bmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBJ
bXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0g
ICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0g
ICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAgICAgICAgICAgICAg
IGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0
dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0p
OwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgotCi0gICAgICAgIC8v
IDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAgICAgaWYgKGhhc09i
amVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAg
ICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtp
bmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBw
cm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2Ug
dHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9k
IGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5j
ZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJ
dGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBl
LCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUg
dGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
IGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJy
YXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFz
SXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5
cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEg
cmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAxMi4gSWYg
ViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJp
Z2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+
Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAgICAgICAgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElE
TEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2
YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJp
YyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51
bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmln
YW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNO
dW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZh
bHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1l
cmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
bnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVz
IGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9v
bGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5
cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47
Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2lu
ZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5n
IFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4s
IFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFu
dCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7Ci0KLSAgICAg
ICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwotICAgICAgICBicmln
YW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICB1
c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBl
KT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRl
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04g
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
OjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3Rh
dGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShz
dGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8
VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0K
LSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFs
c2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1
cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jl
c29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBw
ZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVy
Q2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9X
cmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkp
Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJl
dHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERl
dGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBl
bmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxs
b3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0
ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIg
OiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0g
dHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1
c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7
Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAg
IHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1
ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAg
ICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBX
VEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2luY2x1ZGUg
IkpTRE9NQ29udmVydEFueS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJvb2xlYW4uaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnRDYWxsYmFja3MuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnREYXRlLmgiCisjaW5jbHVkZSAi
SlNET01Db252ZXJ0RGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEVudW1lcmF0
aW9uLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydEluZGV4ZWREQi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEludGVyZmFj
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEpTT04uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnROdWxsLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVsbGFibGUuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnZlcnROdW1iZXJzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0T2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNET01Db252ZXJ0UmVjb3JkLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2Vx
dWVuY2VzLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0U3RyaW5ncy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dFVuaW9uLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0V2ViR0wuaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydEFueS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydEFueS5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEFueS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVy
U291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklE
TFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Citl
bnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51
bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Cisg
ICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
KworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBj
b252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVu
dW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sK
KyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4g
SlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1l
cmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBj
b252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUs
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmpl
Y3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNl
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChz
dGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7
CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9w
YWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3Rh
dGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2
YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRl
LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
eworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
K30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFs
dWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
PElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAg
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFi
bGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5
cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNv
bnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0
byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFi
bGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVh
dE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwor
ICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVy
ZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5l
ZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAg
Ly8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcg
dGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlw
ZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0
YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVy
PElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0
eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5
cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0
LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+
OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwor
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAg
eworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
b2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7
IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsg
fQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQ
dHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFj
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0
aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+
IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Cisg
ICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQz
Ml90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVt
YmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0K
KworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3Rh
dGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
c2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25n
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZs
b2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
eworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAg
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBv
dmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChN
ZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcg
dHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1
cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6
YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJy
YXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZz
dGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9y
IG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZv
ciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBz
dXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhy
b3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAg
dXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBl
PjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAg
ICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAg
IGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93Pwor
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5k
ZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpD
b250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMy
KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGlu
ZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91
YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWND
b252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6
OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkq
IGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5n
bG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJs
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0
YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVu
Z3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYg
KCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNr
OworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBl
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJm
bHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1Vu
ZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgo
JnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7
CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8Pgor
ICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+
OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisg
ICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8
VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWls
OjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJh
eTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJh
eSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxp
c3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywg
YXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisK
K25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+
CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0
YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsK
KyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
Ly8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4u
CisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiBy
ZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90
IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blBy
b3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0s
IEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
Ly8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6
CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0
IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVz
Y3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBk
ZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFu
ZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVk
LCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1l
cmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlw
ZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJD
b252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAy
LiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlw
ZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAg
ICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3Rh
dGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVk
S2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFs
dWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBh
IHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2Fz
ZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFw
cGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1h
cCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAg
Ly8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkg
aW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAg
ICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3Jp
cHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVk
LCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIs
IG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1Zh
bHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwor
CisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShy
ZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1
ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRl
ZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
Y29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5j
dGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248
VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICgh
dmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2Jh
bE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1
ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVy
blR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVj
dCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBz
dHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcg
dHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAg
IHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlw
ZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJ
RExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVM
aXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlz
dD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8
fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmlj
IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+Owor
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9u
PFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmlu
Z1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVz
ID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBz
dHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVu
Y2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0g
MD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96
ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVM
aXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9u
YXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxi
cmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlv
bmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZE
aWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlv
bmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rp
b25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rp
b25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVM
aXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAg
fHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1Jl
Y29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5j
ZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlw
ZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6
XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5
cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
bnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8
VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAg
ICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBo
YXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVy
IHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBl
Y3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
IHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
ZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFy
eVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlU
eXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFz
UmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3Qs
IHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2Ug
dHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVz
IGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVm
ZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55
PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAg
IGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5
cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUg
PSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJU
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFw
cGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5
cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNh
c3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmpl
Y3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAo
dmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZh
bHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6
ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAv
LyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9i
amVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChW
LCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5J
ZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1l
dGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZy
b20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVy
blR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBo
YXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBA
aXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJy
dXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9k
IGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZy
b20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNG
cm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1
cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlw
ZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBk
aWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlU
eXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNv
cmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBy
ZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNv
cmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVy
ZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0
dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2Jq
ZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgor
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19z
YW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9v
bGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2
YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51
bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdh
bmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3Ry
aW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0
cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8g
MTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhh
c051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUs
IGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAg
ICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFu
VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xl
YW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3
LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAg
dXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5h
bWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5h
bWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2Vx
dWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRh
dGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4
ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVl
PiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShh
dXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3Zl
Q1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAg
aWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5W
YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5
cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlh
bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRp
YyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVl
LCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09O
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpq
c051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5l
ciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRM
aXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAg
ICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpj
cmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Cisg
ICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5
cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisK
KyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWls
IGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2Ug
eworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4g
eworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAg
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiBy
ZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5
cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+
OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50
SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwor
ICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVu
YW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFy
aWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkK
K3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChz
dGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsK
KworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRh
aW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0g
c3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQg
fTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAg
IH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydEFueS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydEFueS5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTk2ICsyNSwx
MSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1l
bnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBj
bGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5n
ZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlv
bmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBs
ZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsK
LQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRy
dWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwg
ZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50
YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQogdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4g
ewogICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CiAgICAgCkBAIC0yNDQsMTY1
NyArNTksNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKICAgICB9
CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxh
YmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAg
ICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBl
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8
VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQg
dGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8v
IGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEg
bnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRo
IFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlw
ZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVs
c2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwu
Ci0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9v
bGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9v
bCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBz
dXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlND
OjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5U
eXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWls
IHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBU
KiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQm
PihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25z
dCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgp
OyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAg
ICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9J
bnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0
PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGlu
ZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQz
MkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQz
Migmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2
NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWdu
ZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVy
PElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAg
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZs
b2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8v
IEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
dHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2
YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAg
ICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0s
IEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJh
YmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1Zh
bHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRp
b24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVu
dGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAg
ICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0
ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAg
ICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252
ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAg
ICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAg
ICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2Nv
bEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWND
b252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRo
cm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpT
Qzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpT
Qzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0g
SlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5p
c0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91Ymxl
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwg
aSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdl
bmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYg
KCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFy
cmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2Jz
ZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJh
eS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hh
cGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91
c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0
SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBE
ZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVl
bmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBK
U0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZy
b3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96
ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owot
ICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFw
cGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRv
KiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgm
ZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0
eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmlu
Z1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0
cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3Ry
aW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJ
RExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9u
VHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8
SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJl
dHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykg
aXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5b
W093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5
cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlv
bk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAg
ICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qg
b3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8g
MS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlk
R2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwg
a2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZp
bmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5k
ZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8v
IGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgp
LmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUg
b2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50
aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRv
IHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBM
ZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUg
Vi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZl
cnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElm
IHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5
cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4g
TyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRo
aXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndp
c2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
LCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5
cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAg
ICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBl
JSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2
YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXAp
IHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVD
TUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJl
cXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50
aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJl
IHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0
byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFs
dWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9w
ZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBr
ZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDog
Y3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVh
dGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlv
bmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGlj
dGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlv
bmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9u
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMg
VCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExF
bnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pT
KGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFj
ayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVu
Y3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
IGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwg
Jmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVm
UHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVj
dCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
LSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAg
dXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNl
PgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250
ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5
cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5
cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6
OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBu
dW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9
IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1l
cmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmlu
Z1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMg
IT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
c2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJh
eVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBE
aWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlv
bmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
RGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFy
eSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
RGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5n
IERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhh
c0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29y
ZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBy
ZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVj
b3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZh
Y2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJp
Z2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxh
YmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5k
Ojphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1
ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExO
dWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQg
bWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBp
cyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMu
IElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25h
cnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGlj
dGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVj
b3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlw
ZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBv
YmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRl
cmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewot
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAg
ICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5
cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5
cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlw
ZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJh
d1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+
OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3Jh
cHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2Fz
dGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25U
eXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZh
bHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBv
ZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBv
cHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlz
IGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1l
dGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBS
ZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMu
IElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGlu
ZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3Ip
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VU
eXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFy
cmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVy
ZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0
IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0
aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAo
aGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxp
c3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9
IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAo
aGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUs
IGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAg
ICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAg
aWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJp
Y1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNC
b29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhh
c0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
IC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0g
dHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0g
dHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1h
a2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBs
ZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBhdXRv
IGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpK
U1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+
KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAg
ICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFy
ZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6
OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+
KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJU
KHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAg
IHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUs
IHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgm
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDog
SlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVudCBM
aXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlzdGVuZXIg
PSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRl
KSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJl
dHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVz
b2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRp
YyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFj
ZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsK
LQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVy
dGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9y
PEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFy
Z3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1l
bnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252
ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJ
bmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAg
IGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxv
cHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46
OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVu
Z3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChp
KSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51
bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkp
OwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydEJhc2UuaAkocmV2aXNpb24gMjExNTQ4KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJT
b3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURM
VHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2Vu
dW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAg
ICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
CisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNv
bnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51
bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZh
bHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dl
cj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBK
U1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVy
YXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNv
bnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVj
dD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0
ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7
CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0
ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4m
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8
SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlw
ZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29u
dmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRv
IFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJs
ZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0
Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Cisg
ICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJl
LgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVk
LCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAv
LyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0
aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwg
c3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3Rh
dGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxl
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9
OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQu
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZm
ZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5h
bWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
Qzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVk
UmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Cisg
ICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFv
YmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0
cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRp
YyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4g
eworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
T2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAg
ICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1i
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQor
CisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1
cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxv
YXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7
CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAg
ICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
b3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92
ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1l
ZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
LnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0
eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlz
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVy
biB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjph
c09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJh
eS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRp
b25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0
YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3Ig
bnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9y
IHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1
cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJv
d1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1
c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+
OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAg
ICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAg
SlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAg
aWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFu
ZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Cisg
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRl
eGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNv
bnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5k
ZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdU
eXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3Vi
bGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0Nv
bnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVj
dCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6
aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSog
YXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmds
b2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxl
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5n
dGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4
aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7
CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZs
eSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5k
ZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgm
c3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6
U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAg
ICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxU
PihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29u
c3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJy
YXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3Ip
CisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRv
SlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5
ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlz
dCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBh
cnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4K
KyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3Rh
dGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJU
b1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29y
ZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlw
ZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwor
ICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4K
KyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJl
c3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3Qg
T2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJv
cGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwg
SlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAv
LyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoK
KyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQg
ZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNj
cmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRl
c2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5k
IGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQs
IG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVy
YXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRl
ZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8v
IDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBl
IEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNv
bnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIu
IExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFs
dWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBl
ZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAg
ICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0
ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRL
ZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1
ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEg
cHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNl
LgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBw
ZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVu
YW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1h
cFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFw
KQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAg
ICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAg
ICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBp
biBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAg
ICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlw
dCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQs
IGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwg
bm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFs
dWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisK
KyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJl
c3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVl
UGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVk
IGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0
aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0
aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxs
YmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxU
Pj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2
YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFs
T2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVl
KSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0
IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0
cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0
eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAg
eworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBl
bmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElE
TFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxp
c3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8
IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRp
b25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248
VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5n
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0
cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsK
KworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3Qs
IElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+
Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8
IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5j
ZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25k
aXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAw
PjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3pl
bkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1
c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxp
c3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25h
cnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9u
YXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlv
bmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlv
bmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVj
b3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNl
VHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpf
MT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlw
ZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBu
dWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxU
eXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAg
ICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhh
c051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIg
dHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVj
dGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBp
cyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUg
fHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBk
aWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5
VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBl
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNS
ZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwg
dGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0
eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMg
YSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMg
aW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8
VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAg
YnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewor
ICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlw
ZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9
IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5
cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBw
ZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlw
ZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2Fz
dGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
c3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVj
dCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFs
dWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXpl
IHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8v
IG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2Jq
ZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYs
IEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklm
QWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0
aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJv
bSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJu
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhh
c1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBp
dGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1
cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2Qg
aXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJv
bSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zy
b3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVy
blR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBl
LCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRp
Y3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5
cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29y
ZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJl
Y29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29y
ZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJm
YWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmpl
Y3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Cisg
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3Nh
bWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29s
ZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZh
bHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVt
ZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2Fu
ZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJp
bmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3Ry
aW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAx
NS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFz
TnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwg
aGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAg
ICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5U
eXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVh
blR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcu
IFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1
c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFt
ZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1
ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0
aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXgg
PSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+
IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1
dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVD
VkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBp
ZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZh
bHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlw
ZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFu
dCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJu
VmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUs
IDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6Ompz
TnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVy
IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExp
c3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNy
ZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAg
ICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
UmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlw
ZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYg
RU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKwor
I2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwg
Y29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7
CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAg
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJl
c3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlw
ZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47
CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJ
bmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Cisg
ICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5h
bWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJp
YWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQor
eworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0
YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9Owor
CisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFp
bmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBz
dGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9
OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydEJhc2UuaAkocmV2aXNpb24gMjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMSArMjUs
MTMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNs
dWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTT05PYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBDb252ZXJz
aW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjsKIAotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
fTsKIAogc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKICAgICB2b2lkIG9wZXJhdG9y
KCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQpAQCAtNTEs
MjAgKzQzLDEwIEBAIHN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0
aW9uVGhyb3dlciYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93
ZXImJik7CiAKLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlv
bmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFy
eShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CkBAIC04MCwxNiArNjIsNiBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29uCiAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
fQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQogewogICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwpA
QCAtMTE2LDEwICs4OCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYm
KTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CiAKLS8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBUKTsKLQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KIHN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI7CiAKQEAgLTIxMiwxNjg5ICsxODAsNCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdENvbnZlCiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChj
b25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9u
ZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQo
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5h
bWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBl
OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExB
bnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpS
ZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVy
c2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2Jq
ZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1l
ZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0
eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90
YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVs
bGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBI
YW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBu
dWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZh
bHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
ICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIElt
cGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051
bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVG
cm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29s
ZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0g
ICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVm
ZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0g
UmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4K
LXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBw
ZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25U
aHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJu
VHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3Bh
Y2UgRGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJl
Zihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25z
dF9jYXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJP
clJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVy
biBwLmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5
dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExC
eXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNo
b3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3Rh
dGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihu
dW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRp
YyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1
ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigp
KQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJ
bnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50
IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0
Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVt
YmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikp
KQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1i
ZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMg
aW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERP
TVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
ICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVh
Y2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0
YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3Bl
Y2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5
IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBU
byBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVy
bG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFu
IEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0
KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigp
W2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5k
ZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFs
dWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29w
ZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4
KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAg
IHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlw
ZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVy
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAg
ICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owot
ICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8K
LSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6Oklu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6Oklu
ZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZh
bHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0g
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9u
Zz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAg
IHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0
LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAg
ICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZn
bG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAg
ICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewot
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9
Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8Sywg
Vj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxl
bWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBv
ZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9y
IE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElm
IFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAK
LSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlz
IGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAg
IG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpF
bnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlz
IGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAg
ICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAg
ICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAg
IGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBu
b3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJh
YmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAg
ICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRv
ci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJ
REwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRh
aWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAg
ICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVl
IG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8
Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZh
bHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFw
cGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1
LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRW
YWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZh
bHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJu
IHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0
UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGlu
ZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBh
aXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVk
IHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAg
aXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8v
IGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBl
c1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAg
ICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1
ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0
ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wg
Y3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQu
IEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVh
dGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQu
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlv
bmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVy
YXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAg
ICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENh
bGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0
KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlND
Ojphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
VSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewot
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5h
bWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsK
LSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExp
c3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRp
b25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRp
dGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAg
IHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVu
YW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXpl
PE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1l
cmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVy
aWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJp
Y1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9y
IElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmln
YW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcg
U3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3Ry
aW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxT
ZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2Vx
dWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxG
cm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAg
ICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09
IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
ZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwot
ICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlw
ZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpz
aXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJl
Y29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAg
dXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1Jl
Y29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAo
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2lu
ZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRl
cmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRl
cyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUg
PSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpf
MT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBm
bGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RF
OiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAg
ICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhh
c0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBp
ZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBp
ZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
UmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBw
bGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAg
ICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBp
ZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2
YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1
ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0o
YXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0
eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAg
IHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZh
bHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVt
ZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVy
blZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBh
bnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpT
Q2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAg
ICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhl
IHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0
IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ug
b2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBl
cyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
SXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
U2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2Yg
R2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNy
ZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkg
b2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
IT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9k
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmICho
YXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMg
aW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Jl
Y29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNv
cmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxi
YWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVw
IDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBv
YmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFu
IHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29s
ZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgot
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBl
TGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAg
ICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xl
YW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNC
b29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0g
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0g
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1l
cmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElm
IHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3Ry
aW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAg
ICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0
cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4K
LSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAg
IGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJv
b2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5
cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRp
b25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJy
aWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRf
c2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAg
ICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9u
YWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8
U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVu
YW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBl
OwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pT
PGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8
STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVl
KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0
ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91
YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09O
PiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lm
eSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpT
T05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxP
YmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlz
dGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8g
bGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29y
bGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURM
V2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFu
eT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZv
ciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElE
TEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFs
PEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlh
ZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVy
ID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAg
c2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5l
cj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJl
c3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXpl
X3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3Vu
dCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBz
dGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJ
bmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZh
cmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBp
LCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQp
IH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0Qm9vbGVhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJvb2xlYW4uaAkocmV2aXNpb24gMjExNTQ4KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCb29sZWFuLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0ds
b2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBs
ZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51
bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VS
YW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
eyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNP
YmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVj
aWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3Ig
SURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9w
dGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhw
ZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmpl
Y3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24p
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJ
bXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Nj
b3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBj
b2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBU
KTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+
OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUs
IHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxz
ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9h
ZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYm
IHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
T3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkp
KSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3
bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
eworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZh
dWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVt
ZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFu
eT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ry
b25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdl
dCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBz
dHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxh
YmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElE
TEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46
OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+
PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252
ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBP
YmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9y
bWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3Nl
IHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5u
b3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBu
dWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6
IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlz
IG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8g
dmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlv
blRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcg
SW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVl
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFj
dFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJv
b2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFu
KHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsK
KyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcg
VG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlC
dWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3Mg
PSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0
LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5n
IFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Cisg
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2Ug
dHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFj
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3Jh
cHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlv
blRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1
cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVz
cGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9y
UmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0
ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0
dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
Qnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
U2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hv
cnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
c2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBz
dGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMy
KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5z
aWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3Rh
dGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkp
CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2
NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMy
KCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRv
VUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9p
bnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBu
dW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAg
c3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51
bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVy
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1i
ZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5y
ZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRv
dWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
RG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRp
YyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisK
KyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVk
RG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1
cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5
U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRp
b24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJp
bmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0
aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNP
YmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURM
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9y
RWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgq
c3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNl
cHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBT
cGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9u
bHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcu
IFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92
ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMg
YW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252
ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0
KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmpl
Y3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVy
YXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1
cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0
eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNl
cHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5n
VHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4
aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMy
KClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBp
bmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91
c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVW
YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDAp
OworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNj
b3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5k
ZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAg
ICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExU
eXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0
ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAg
ICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAg
ICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAg
ICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZh
c3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252
ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93
PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6
SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6
SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlND
OjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVl
ID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5
LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisK
KyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExM
b25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0
dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3Qg
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4g
eworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNl
PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBh
Y2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
bGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAg
bGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmpl
Y3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJh
eTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNl
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5l
Q2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Cisg
ICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwg
Jmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVj
dG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAg
IHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Cisg
ICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlk
ZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7
CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAg
IH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3Qg
Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxL
LCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46
OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1w
bGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNl
IG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQg
b3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4g
SWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAg
IAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtl
eXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5h
bWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAg
ICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6
OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtl
eXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAg
ICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisg
ICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAg
ICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0
b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlz
IG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1l
cmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAg
ICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlw
dG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewor
ICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFu
IElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERl
dGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAg
ICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAg
ICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAg
ICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFs
dWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRl
cjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMg
dmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBo
YXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBl
ZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVk
VmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1
cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8Sywg
Vj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmpl
Y3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBw
aW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVl
UGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0
ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3Rl
cCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAg
Ly8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0
IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAg
ICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZh
bHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3Jl
YXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9v
bCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8g
NC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNy
ZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3Vs
dC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxU
Pj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0
aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVt
ZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewor
ICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVt
ZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
Q2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmpl
Y3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShK
U0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JS
ZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5h
bWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7
CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBS
ZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25k
aXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAg
eworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8
TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9Owor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRp
dGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29u
ZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Cisg
ICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlw
ZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51
bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVt
ZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1l
cmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBm
b3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2lu
ZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZT
dHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2Vx
dWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBT
ZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9m
U2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBi
cmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250
PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKwor
ICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
PT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7
CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlU
eXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6
OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
UmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAg
ICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFz
UmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9
IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1i
ZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVz
aW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETElu
dGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1
ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlw
ZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6
Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhl
IGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5P
VEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAg
ICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAg
IGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBh
IHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUg
SURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAg
ICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAg
IGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46
OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZh
bHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsm
XShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBl
KHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlv
blR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAg
ICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAg
ICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVk
VmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBs
ZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0
dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlz
IGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6
SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwt
PmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAg
ICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0
aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1
bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5j
ZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhv
ZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICho
YXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBv
ZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJh
eSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRo
b2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZl
cnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBl
cyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
UmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJl
Y29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0
ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVz
IG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRv
IHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xl
YW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJv
b2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4u
CisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5
cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Cisg
ICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9v
bGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhh
c0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoK
KyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4K
KyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51
bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNT
dHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Cisg
ICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
U3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBl
LgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAg
ICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURM
Qm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5p
b248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcg
VHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRh
dGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0g
YnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFu
dF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7Cisg
ICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFj
aDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlw
ZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5
cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRv
SlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6Omdl
dDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAg
ICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFs
dWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExE
YXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBk
b3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpT
T04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5n
aWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxU
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2Jh
bE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRM
aXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0
byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRX
b3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBz
dGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJ
RExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdM
QW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1
ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQg
Zm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRl
bT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8
SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9u
YWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWlu
ZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAg
ICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFp
bmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6
UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNp
emVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENv
dW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAs
IHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFy
dEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6
VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7
IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3Vs
dCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0Qm9vbGVhbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEJvb2xlYW4uaAkocmV2aXNpb24gMjExNTQ4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Qm9vbGVhbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwzNzQgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgog
I2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVk
ZSAiSlNET01Db252ZXJ0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZl
cnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0
b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0
JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2Vw
dGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJ
REwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxp
emVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZl
cnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17
Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
LX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJz
aW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0
aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJv
b2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVl
KQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewotICAg
IHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVy
dGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpT
Qzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6
U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFu
eT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8
SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8
VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAgIAotICAg
IC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFu
IElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWluZyBhc3Np
Z25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1
bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051
bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBu
dWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAgLy8KLSAg
ICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJu
IHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90aGVyd2lz
ZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3Ig
dGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0g
ICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRo
cm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0g
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJ
RExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0g
ICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJv
b2xlYW4+IHsKICAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKQEAgLTQxMCwxNDkxICs0Nyw0IEBAIHRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4KICAgICB9CiB9OwogCi0vLyBBcnJheUJ1
ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlC
dWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsK
LSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0K
LS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJl
ZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVy
ZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJD
bGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2Jq
ZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVm
KGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJl
Zihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9y
dD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
U2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50
MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7
Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQz
MigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
ewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0
YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVt
YmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0g
ICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAg
IH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAg
ICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5p
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRp
YVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7
Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
YmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkg
fTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwg
WyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFs
dWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwot
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGlu
Z1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUg
bnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUg
YXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29u
dmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQot
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjpp
c0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xv
YmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICgh
cmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsK
LQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNo
YXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMy
KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91
YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVj
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFz
QXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5p
c0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUg
cmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5
LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxP
YmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJl
dHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFp
bCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0
ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBL
ZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVl
VHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4g
SWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBh
IFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpT
Qzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAg
ICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4K
LSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZv
ciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tH
ZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAg
aWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJh
YmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFu
ZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQot
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNj
cmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtl
eSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAg
ICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29u
dmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/
IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1
dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBh
IGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAg
ICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0Lgot
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBh
IG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8g
Mi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4g
TGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAg
ICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhl
IGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4K
LQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFu
IEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8v
IDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVz
VmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1Zh
bHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFy
eTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9u
YXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29u
dmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsK
LSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVj
dCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBV
bmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJv
b2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQs
IGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6
ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAg
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2lu
ZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+Owot
ICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVz
aW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1i
ZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51
bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVy
aWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcg
U3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9v
ZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxT
dHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNl
cXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNl
cXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJv
emVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBG
cm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJh
eVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmln
YW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25k
aXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0g
ICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
UmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29y
ZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJl
ck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVj
b3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEu
IElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjpp
c19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVs
bFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVu
aW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1m
bGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlw
ZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29y
ZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBs
ZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVj
dCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAg
ICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6
OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZt
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAg
ICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgot
Ci0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAg
ICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkg
ewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcg
Y29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRo
YXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAx
LiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCku
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRl
ZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VU
eXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3pl
biBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExl
dCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5l
ZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0
ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJh
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIu
NikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xl
YW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwg
YnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBp
cyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJp
Y1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAg
ICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051
bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdU
eXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURM
VW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlz
dDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpw
dHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVl
PjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9u
VHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4
KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwot
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0g
ICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0g
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5k
ZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhp
c09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0
ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAot
ICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURC
S2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBX
ZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQot
bmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1
c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVt
OwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3Ry
dWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAg
fTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBs
ZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5n
dGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUg
RGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3Vy
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRCdWZmZXJTb3VyY2UuaAkocmV2aXNpb24gMjExNTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZl
clNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJ
RExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5l
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9Owor
ZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXRO
dWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewor
ICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVy
YXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24g
Y29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VF
bnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9u
VmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2Vw
dGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+
IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUm
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhj
ZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVt
ZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyog
Y29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRl
LCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2Jq
ZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxz
ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYm
IHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQor
eworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0
YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
dmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0
ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2
YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7
Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1Zh
bHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWls
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0
ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAg
ICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxh
YmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpU
eXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBj
b252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUg
dG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxh
YmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJl
YXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8K
KyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hl
cmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmlu
ZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAg
IC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5n
IHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29u
ZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2Vw
dGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5
cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNT
dGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUp
KQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZh
bHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0
cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4g
dHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0K
K307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9y
dC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFy
cmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1
ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsK
KyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0g
V3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFko
IW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkg
eyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7
IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVm
UHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQor
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3Rh
dGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0
PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAg
ICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0
Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewor
ICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50
MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0
YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNp
Z25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9u
Z0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExG
bG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAg
ICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAg
ICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAg
ICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIp
CisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3Vi
bGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQg
b3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
TWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5n
IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUu
aXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6
OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFy
cmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgm
c3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7
CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RG
TW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZv
ciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBm
b3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8g
c3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRo
cm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAg
IHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlw
ZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVy
OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAg
ICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAg
ICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8K
KyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6Oklu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6Oklu
ZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQz
MigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChp
bmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRv
dWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmlj
Q29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlND
Ojppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5
KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+
Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFi
bGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxl
bmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFz
azsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFw
ZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVy
Zmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNV
bmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4
KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0
dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNl
cXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWls
OjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQor
ICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pT
PFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpj
b25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5B
cnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJy
YXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3Rv
cikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAg
ICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQo
dG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJy
YXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBs
aXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMs
IGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQor
CituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBl
PgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmco
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVy
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhz
dGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmll
clRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25U
eXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
IC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+
LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4g
cmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5v
dCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVy
blR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Q
cm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZt
LCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2Rl
KCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAg
IC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVy
OgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExl
dCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6
UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERl
c2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwg
ZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBh
bmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5l
ZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVt
ZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1Vu
ZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5
cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVy
Q29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8g
Mi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5
cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisg
ICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0
YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBl
ZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZh
bHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMg
YSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNh
c2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBh
cHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlw
ZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBt
YXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAg
IC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgor
ICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAg
ICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUp
IGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Cisg
ICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2Ny
aXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJl
ZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVy
LCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1
ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNW
YWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsK
KworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHko
cmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFs
dWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0
ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7
CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkg
dHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25h
cnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1
cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVy
YXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVj
LCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVu
Y3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENh
bGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9u
PFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25U
aHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAo
IXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9i
YWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxU
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFs
dWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlw
ZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVy
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1
cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWls
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1
Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAg
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5n
IHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAg
ICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5
cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0g
SURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBl
TGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAg
fHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJp
YyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsK
KworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlv
bjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJp
bmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBl
cyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
c3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBD
b25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+
OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlz
dD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAg
fHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVl
bmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9
IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJv
emVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96
ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAg
IHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBl
TGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlv
bmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8
YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rp
b25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Cisg
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9m
RGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rp
b25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0
aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0
aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAw
IHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3Jk
IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNS
ZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5
cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVu
Y2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5
cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6
Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0
eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVl
IG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55
PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Cisg
ICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwg
aGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJl
ciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhw
ZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBW
IGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlw
ZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25h
cnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5
VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5
cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhh
c1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0
LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNl
IHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBp
cyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBl
cyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJl
ZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAg
ICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0
eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1l
IFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBl
ID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVy
VHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3Jh
cHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJU
eXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShj
YXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5W
YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2Jq
ZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2
YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1p
emUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAg
Ly8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBv
YmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2Qo
ViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJu
SWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBt
ZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBm
cm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1
cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwg
aGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVz
IGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBA
QGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFi
cnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhv
ZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBm
cm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
RnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0
dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5
cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQg
ZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5
cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5
VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVj
b3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
cmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVj
b3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2Ug
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRl
cmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9i
amVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoK
KyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNf
c2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jv
b2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6
dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBp
ZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBO
dW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmln
YW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0
cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNT
dHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8v
IDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmICho
YXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBl
LCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAg
ICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVh
blR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29s
ZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAx
Ny4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAg
IHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVu
YW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVu
YW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3Nl
cXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50
YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRl
eCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1
ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0o
YXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAg
IGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJu
VmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxU
eXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJp
YW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1
cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0
aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1
ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNP
Tj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNj
cmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxp
emVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6
anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVu
ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50
TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6
Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwor
ICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5U
eXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVy
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNp
ZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9Owor
CisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFp
bCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+
IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAg
ICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byog
cmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExU
eXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJh
c2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVt
PjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVu
dEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsK
KyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBl
bmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZh
cmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgp
Cit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAo
c3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07
CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250
YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAt
IHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwor
ICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0
IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnRCdWZmZXJTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaAkocmV2aXNpb24gMjExNTQ4KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE4NzUgKzI2LDk3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydEludGVyZmFjZS5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgi
CisjaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTVHlw
ZWRBcnJheXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20g
SlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjsKKy8vIEZJWE1FOiBJdCBpcyB3cm9uZyB0aGF0IHdlIHRyZWF0IGJ1ZmZlciByZWxh
dGVkIHR5cGVzIGFzIGludGVyZmFjZXMsIHRoZXkgc2hvdWxkIGJlIHRoZWlyIG93biBJREwgdHlw
ZS4gCiAKLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFs
LCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisvLyBBZGQgYWRh
cHRvcnMgdG8gbWFrZSBBcnJheUJ1ZmZlciAvIEFycmF5QnVmZmVyVmlldyAvIHR5cGVkIGFycmF5
cyBhY3QgbGlrZSBub3JtYWwgaW50ZXJmYWNlcy4KIAotc3RydWN0IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3Qm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXpl
ZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVu
dW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFs
PFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1l
bnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxP
YmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6
SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVk
c0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
dHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFs
c2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4m
JiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0g
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYg
KFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNl
cHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVh
dGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYg
dmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAg
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29u
dmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRp
b25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewot
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNw
YWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwordGVt
cGxhdGU8dHlwZW5hbWUgSW1wbGVtZW50YXRpb25DbGFzcz4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czsKIAotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZl
cnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6
Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlw
ZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlz
IGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0
dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAv
LyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0
dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8K
LSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVy
d2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxs
YWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURM
IHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsK
LSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
ewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVj
dDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkp
OwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3Rk
OjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0
cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAg
IHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9y
dC4KIHRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFy
cmF5QnVmZmVyPiB7CiAgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
OwogICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKIH07
CiAKLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgogdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CiAgICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKICAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47CiB9OwogCi0vLyBUeXBlZCBh
cnJheXMgc3VwcG9ydC4KIHRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+
IHsKICAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OwogICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwogfTsKIAotLy8gTUFSSzogLQotLy8gTUFS
SzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsK
LSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9
Ci19OwogCi1uYW1lc3BhY2UgRGV0YWlsIHsKK2lubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+
IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50
OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQx
NkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQz
MkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50
OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQ
dHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBS
ZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
K2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KKworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5l
IFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6
OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6Oklu
dDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+
IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vu
c2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVk
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0
b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVk
VWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5z
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQor
aW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWRO
YXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQm
IGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxU
PiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
JiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVm
ZmVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAorICAgIC8vIFRoZSBKU0FycmF5QnVmZmVy
OjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVh
dGlvbi4KKyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkp
LCAmYnVmZmVyKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+
IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGlj
IGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1i
ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50
b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNp
Z25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50
NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50
NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2
NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5
cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRp
YyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUg
bnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAg
c3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQot
ICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
ICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAm
JiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
ICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJ
bkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRl
LCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lh
bGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGlt
cGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBh
ZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9h
ZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4
ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
IHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0K
LSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsK
LSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9u
IHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhW
YWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwg
ZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZz
dGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVz
aW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47
Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAg
ICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBK
U0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBp
ZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5k
Tm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4
aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29u
dGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVl
ID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0
RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgIH07CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlC
dWZmZXJWaWV3JiB2aWV3KQoreworICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9i
amVjdCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8
VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWls
OjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJh
eTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJh
eSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxp
c3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywg
YXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+
Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0
YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEss
IHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5
cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBl
ID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUg
YSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBU
eXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIAotICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlw
ZUVycm9yLgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAot
ICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAg
ICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1v
ZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0
LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVh
Y2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8m
IGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93
blByb3BlcnR5XV0oa2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRl
c2NyaXB0b3I7Ci0gICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdl
dE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAo
IWRpZEdldERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVd
XSBpcyB0cnVlOgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVk
IGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAg
ICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0
b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJl
IGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAg
ICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0
KHN0YXRlLCBrZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0
KE8sIGtleSkuCi0gICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZz
dGF0ZSwga2V5KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29u
dmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0
eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5
IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAg
IC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFw
cGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBh
dXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUg
ISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBS
ZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQg
ZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAg
ICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5
IHRvIGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0g
ICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNN
QVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUs
IGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4g
TGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1
ZSkuCi0gICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlND
OjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUp
OwotCi0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyAzLiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFQmIGRpY3Rpb25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlU
b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkg
ewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBU
OjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6
Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZh
Y2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Q2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9u
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBl
bmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBl
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFs
c2U+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9u
dDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1
Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5
cGUgPSB2b2lkOwotICAgIH07CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlC
dWZmZXJWaWV3KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRp
dGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29u
ZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRl
cjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlw
ZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51
bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVt
ZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1l
cmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBm
b3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8x
Pj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVy
ZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2lu
ZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZT
dHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2Vx
dWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBT
ZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9m
U2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsK
LSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBi
cmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250
PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQot
ICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBl
TGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
PT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7
Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlU
eXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6
OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
UmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAg
ICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFz
UmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9
IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1i
ZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVz
aW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETElu
dGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1
ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlw
ZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6
Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhl
IGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5P
VEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAg
ICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAg
IGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBh
IHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUg
SURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAg
ICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAg
IGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46
OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZh
bHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsm
XShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBl
KHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlv
blR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAg
ICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAg
ICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVk
VmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBs
ZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAg
ICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0
dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlz
IGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6
SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwt
PmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBi
ZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0
aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1
bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5j
ZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhv
ZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICho
YXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBv
ZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJh
eSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRo
b2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZl
cnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBl
cyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
UmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJl
Y29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0
ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVz
IG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRv
IHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xl
YW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJv
b2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4u
Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5
cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0g
ICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9v
bGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhh
c0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoK
LSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4K
LSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51
bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkg
ewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNT
dHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0g
ICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
U3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBl
LgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAg
ICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURM
Qm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5p
b248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcg
VHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRh
dGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0g
YnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFu
dF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0g
ICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRp
b25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFj
aDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlw
ZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5
cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRv
SlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6Omdl
dDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAg
ICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFs
dWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExE
YXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBk
b3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpT
T04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5n
aWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxU
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2Jh
bE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRM
aXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0
byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRX
b3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJ
RExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdM
QW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQg
Zm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRl
bT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8
SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9u
YWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWlu
ZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAg
ICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFp
bmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKK2lubGluZSBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF3
cmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gd3JhcHBlci0+cG9z
c2libHlTaGFyZWRJbXBsKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVu
YW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFy
aWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkK
K2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZl
clZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBzaXplX3QgbGVu
Z3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3Ro
KQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERl
dGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAg
cmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAg
IGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUp
Ci0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7
IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07CisgICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5
U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVz
dWx0LT5pc1NoYXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCShyZXZpc2lvbiAyMTE1
NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUg
LT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7
CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBF
bmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKwor
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZl
cnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNo
YXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9u
IGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0
YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlND
b252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZl
cnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
LCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0
eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50
YXRpb25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJ
RExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxs
YWJsZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxh
YmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBp
cyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5n
IHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0
ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0
IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRo
ZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAv
LyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwg
aWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0
eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUg
VC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAg
IHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051
bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxs
cHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRp
YyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
Qm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3Rl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8v
IEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMg
c3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50
ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+
OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9Owor
CituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBw
KSB7IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBl
cworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMg
aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7
CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
dG9JbnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewor
ICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Z0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9u
Z0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWlu
dDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0
aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBk
b3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0K
KworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRv
dWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisg
ICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERv
dWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAg
ICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7Cisg
ICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAo
Y29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxs
QXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25m
aWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3Qg
dHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWls
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVu
YW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAg
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZN
JiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJ
RExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFk
ZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8v
IHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUs
IG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJy
YXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0Fy
cmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAg
ICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmln
aHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5p
bmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFs
dWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KDApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4o
ZG91YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERp
cmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7
CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7
CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
Q29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisg
ICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Cisg
ICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0
byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkg
JiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Cisg
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5s
aW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50
QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7
CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xv
YmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJv
emVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisg
ICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVu
dCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmlu
Zz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
ZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0
cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwor
ICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4g
c3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExS
ZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3Jk
PEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1l
IEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBW
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBp
bnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5k
ZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAg
IC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQu
IExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7
CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5
cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtl
eSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykg
eworICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShr
ZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAg
ICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3Jp
cHRvcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYg
ZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1
bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICgh
ZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRl
ZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRL
ZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7
CisKKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAg
ICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAg
ICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4g
SURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBD
b252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBz
ZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhp
cyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtl
eSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5
LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
Ni4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0
ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVh
Y2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0
aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAg
ICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8v
IDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVl
LgorICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBi
ZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAg
ICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAg
ICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVy
biByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFy
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248
VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxU
PihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0
cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6
OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwg
dHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
K307CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJv
b2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVl
PgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2lu
ZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExp
c3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlz
dCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmln
YW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVz
aW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJl
ck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28g
Y2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmln
YW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Cisg
ICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51
bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6
Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9u
YXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0
aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpf
MT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9
IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxp
c3QsIGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVj
dFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisK
KyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlw
ZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
TnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBi
cmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVz
IGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAg
ICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAg
ICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAg
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAg
ICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElm
IFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAg
ICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAg
Ly8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQor
ICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBy
ZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVM
aXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAg
ICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAg
ICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRv
IGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAg
ICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5
cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4g
SWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RU
eXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAg
ICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlm
IChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVz
ZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUs
IHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0
aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
c2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0
b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhl
bjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSBy
ZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96
ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJh
dG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBl
IGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBp
bmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMg
YSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBi
b29sZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6
OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZh
bHVlOworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29s
ZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUs
IHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmlj
IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAh
PSAwOworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVy
aWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJv
b2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4u
CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAg
IHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1
ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6
OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisg
ICAgeworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0
ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6
Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcg
SSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
V1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlLnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRv
RGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNP
TlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBS
ZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUs
ICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+Owor
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAg
ICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBj
dXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZl
ciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhO
U1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlw
ZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNz
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBl
ZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4g
b2JqZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8g
TUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExXZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBT
dXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUg
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7
CisKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVu
YW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcg
Q29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAg
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PENvbnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURM
VHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJn
dW1lbnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1
cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWND
b252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92
ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCShyZXZp
c2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRD
YWxsYmFja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTM0MyArMjUsMTEgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5n
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVu
dGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmpl
Y3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1l
bnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51
bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0g
ICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBj
b252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVu
dW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsK
LSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4g
SlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1l
cmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBj
b252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUs
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmpl
Y3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNl
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChz
dGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17
Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9w
YWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24o
KSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3Rh
dGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2
YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRl
LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4g
eyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQot
ewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewot
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
LX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFs
dWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwg
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
PElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAg
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFi
bGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5
cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNv
bnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0
byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFi
bGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVh
dE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwot
ICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVy
ZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5l
ZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAg
Ly8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcg
dGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0g
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAg
fQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlw
ZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0
YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVy
PElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0
eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5
cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0
LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+
OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwot
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAg
ewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgh
b2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7
IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsg
fQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQ
dHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0K
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFj
ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0
aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+
IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0g
ICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQz
Ml90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVt
YmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0K
LQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3Rh
dGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
c2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25n
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZs
b2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
ewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAg
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVy
biBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBv
dmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChN
ZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcg
dHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5p
c051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1
cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2
YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4g
dmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6
YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJy
YXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZz
dGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsK
LSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9y
IG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZv
ciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBz
dXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhy
b3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAg
dXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBl
PjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAg
IGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93Pwot
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5k
ZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpD
b250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMy
KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGlu
ZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91
YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0g
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWND
b252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwot
Ci0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6
OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkq
IGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5n
bG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJs
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0
YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVu
Z3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYg
KCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNr
OwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBl
KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJm
bHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgo
JnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1
cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8Pgot
ICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8
VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWls
OjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJh
eTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJh
eSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxp
c3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywg
YXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+
Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygp
OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0
YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsK
LSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAg
Ly8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4u
Ci0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiBy
ZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90
IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blBy
b3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0s
IEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUo
KSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAg
Ly8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6
Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0
IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVz
Y3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBk
ZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFu
ZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVk
LCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1l
cmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAv
LyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlw
ZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJD
b252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAy
LiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlw
ZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAg
ICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3Rh
dGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVk
S2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFs
dWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBh
IHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2Fz
ZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFw
cGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1h
cCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAg
Ly8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0g
ICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkg
aW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAg
ICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3Jp
cHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVk
LCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIs
IG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1Zh
bHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwot
Ci0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShy
ZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1
ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRl
ZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0
eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgVCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBmdW5j
dGlvbiB0eXBlCi0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248
VD4+IHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CiAgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKQEAgLTEzOTUsOCArNjMsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sg
aW50ZXJmYWNlIHR5cGUKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50
ZXJmYWNlPFQ+PiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgpAQCAtMTQzMSw0NzAgKzk3LDQgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8v
IE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5h
bWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJl
dHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBi
cmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAg
ICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExp
c3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERl
dGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248
VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVy
T2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAg
ICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjpp
c19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlz
dD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8
IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25h
bEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAg
dXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExT
ZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0g
ICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZy
b3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6
XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBl
ID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlw
ZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZh
bHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJl
ck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBl
ID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25k
aXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyAr
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVt
YmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBW
IGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0g
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlm
IChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBv
ZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8g
YmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwg
b3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNS
ZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25h
cnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBk
aWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFz
RGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEg
cmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgot
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhh
dCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRl
cyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0
byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5k
Ojpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdU
Rjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAg
ICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5h
bWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNz
OwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1
ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1
IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVu
OgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0Nl
bGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZv
bGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhl
IGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVy
YXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQo
bWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMg
bm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5k
IG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNT
ZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVu
Y2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVz
IGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9y
KS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRo
b2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3Qg
dW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5k
IG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJy
YXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zy
b3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFz
RGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5
cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlw
ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUg
SURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQg
c3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExC
b29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBl
KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEz
LiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0g
MDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlw
ZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmlu
ZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5
cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXpl
PFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0
eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmlj
VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1l
cmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAx
Ni4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cg
YSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5
cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6
OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJy
aWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBl
Pjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVt
ZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlh
bnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJu
VmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5
cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVm
ZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2
YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwot
ICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwg
ST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7
Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91Ymxl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVl
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxp
emVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3Jl
YXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8g
dmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZh
bHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBp
ZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8
VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVj
dCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUo
V0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9K
U1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0jZW5kaWYK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0
aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAg
ICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAg
ICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0ID0g
Q29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0g
ICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlw
ZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAg
ICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4Owot
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAg
fTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRh
aWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJn
dW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAg
c2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRl
eCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0
eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5k
ZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgICAgICBp
ZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydERhdGUuY3BwCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHA6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODIg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBX
ZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBy
dWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVk
ZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHN0ZGFy
Zy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBhZGRJ
bXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBj
b21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUg
anNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sK
KyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVy
biBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZ1dp
dGhDYWNoZShleGVjLCBzKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9CeXRl
U3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIFN0cmluZyYm
IHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRpbjEoKSkgeworICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJpbmcgaWRlbnRpZmllclRvQnl0
ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQor
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7
CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3Ry
aW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVl
LnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3Zl
KHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5wYWlyZWRTdXJyb2dhdGUo
U3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZvciA4LWJpdCBzdHJpbmdz
OyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAgaWYgKHN0cmluZy5pczhCaXQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiBzdHJp
bmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmcoU3RyaW5nJiYgc3RyaW5n
KQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG5vIHVu
cGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJlZFN1cnJvZ2F0ZShzdHJpbmcp
KQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xvdyBwYXRoOiBodHRwOi8vaGV5
Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQorICAgIC8vIFJlcGxhY2Vz
IHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLgorICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoc3RyaW5n
Lmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKKyAgICBmb3IgKGF1
dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaWYgKFVfSVNfU1VS
Uk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50
Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2Rl
UG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmlu
ZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAg
ICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5n
IHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3Ry
aW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKworSlNWYWx1ZSBqc0RhdGUoRXhl
Y1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVj
dHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUuaW5oZXJpdHMoZXhlYy0+dm0o
KSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUlu
c3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigpOworfQorCiti
b29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlw
ZTsKKyAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBj
YWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJ
SUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOworCisgICAgcmV0dXJuICFh
cHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4
SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtN
YXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZm
ZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAw
MDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRh
YmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3Vi
bGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBp
cyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQo
bWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsK
K30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91Ymxl
IHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVt
KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1bmMoeCk7CisgICAgaWYg
KHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVj
dCBJbnRUeXBlTGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFs
dWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisK
K3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3Qg
SW50VHlwZUxpbWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVl
ID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9
OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQg
b25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYg
SW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZh
bHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdl
LgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJfdCBkID0gdmFsdWUu
YXNJbnQzMigpOworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8
PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/
IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAg
fQorICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRz
VHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwor
CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6
bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAg
ICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29y
KGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/
IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25l
ZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBi
ZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRU
eXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUg
aXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4K
KyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUu
YXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNU
cmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4
KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6
IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0
c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9T
bWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxp
bnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhfdCB0b0ludDgoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKK3VpbnQ4
X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisK
K3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30K
KworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAordWlu
dDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heElu
dDMyKTsKK30KKworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwor
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Cit9CisK
K3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUlu
dDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0
dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Cit9CisKKy8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwordWludDMyX3QgdG9V
SW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFs
dWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJh
bmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRfdCB0b0ludDY0RW5mb3Jj
ZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0
RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0
aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtK
U01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0Q2xh
bXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAg
OiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+
KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dl
YklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisK
KyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFs
dWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRv
SW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90IHRvVUludDY0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNv
bnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJuIG47Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGF0ZS5j
cHAJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydERhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw0NjMgKzIwLDI4IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydERhdGUuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFy
c2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9EYXRlSW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlO
YW1lKQorLy8gRklYTUU6IFRoaXMgc2hvdWxkIGdldCBwYXNzZWQgYSBnbG9iYWwgb2JqZWN0IHJh
dGhlciB0aGFuIGdldHRpbmcgaXQgb3V0IG9mIHRoZSBFeGVjU3RhdGUuCitKU1ZhbHVlIGpzRGF0
ZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgY29tbW9uVk0oKS5hZGRJ
bXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNy
ZWF0ZShzdGF0ZS52bSgpLCBzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1
cmUoKSwgdmFsdWUpOwogfQogCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0K
LQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcu
Y29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsK
LX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBz
dHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJp
bmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb0J5
dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9CeXRl
U3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIC8v
IEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dh
dGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAgICBp
ZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmlu
Z1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIHRo
ZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlmICgh
aGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQot
ICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0
YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhl
IHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyB2
aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50
cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNT
dGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0cmlu
ZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdU
Rk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5n
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5n
KSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQot
ewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUg
dmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQorZG91YmxlIHZhbHVl
VG9EYXRlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVl
LmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOwotICAgIGlmICgh
dmFsdWUuaW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgIGlm
ICghdmFsdWUuaW5oZXJpdHMoc3RhdGUudm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQogICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykp
LT5pbnRlcm5hbE51bWJlcigpOwotfQotCi1ib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0g
b2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5
TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9w
ZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgZmFsc2UpOwotCi0gICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwotfQot
Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOwotc3RhdGljIGNv
bnN0IGludDMyX3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7Ci1zdGF0aWMgY29uc3QgdWlu
dDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZmZmZVOwotc3RhdGljIGNvbnN0IGludDY0X3Qga0pT
TWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0
IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCi0KLXN0YXRpYyBT
dHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBt
YXgpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9T
dHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5n
OjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKLX0KLQotc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4
aW11bSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNp
bmYoeCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJv
clN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmco
eCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0
dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IEludFR5cGVMaW1pdHMg
ewotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4gewotICAg
IHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4OwotICAgIHN0YXRpYyBjb25zdCBp
bnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxp
bWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgK
LX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7Ci0gICAg
c3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVlID0gLTMyNzY4OwotICAgIHN0YXRpYyBjb25zdCBz
aG9ydCBtYXhWYWx1ZSA9IDMyNzY3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5
cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4
VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMg
PSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5s
aW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19p
bnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdy
YWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsK
LSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVk
IGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsK
LSAgICAgICAgaW50MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOwotICAgICAgICBpZiAoZCA+PSBM
aW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
ZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0
c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBkICU9IExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlczsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNU
cmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7Ci0g
ICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJh
aXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4o
eCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8
fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwg
MCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOwotICAgIHggPSBmbW9kKHgsIExp
bWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
eCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1
ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9T
bWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3Jh
bDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0
eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAg
IC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBp
bnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgewot
ICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPD0g
TGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFp
dDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6
aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25h
bih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHgg
PSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwotfQot
Ci1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVp
bnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWlu
dDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OENsYW1w
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
bWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LWJ5dGUKLWludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtb2N0ZXQKLXVpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi1p
bnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50MTZf
dCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50MTZfdCB0
b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAotaW50
MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2Vi
SURMLyNlcy11bnNpZ25lZC1zaG9ydAotdWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19
Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZwotaW50MzJfdCB0b0lu
dDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUu
YXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uo
c3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKLX0KLQotaW50MzJfdCB0b0ludDMyQ2xh
bXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6
IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19Ci0KLXVpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBU
bzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
dW5zaWduZWQtbG9uZwotdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc1VJ
bnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsK
LX0KLQotaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdl
cik7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsK
LSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKLX0K
LQotaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1
cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3Vi
bGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7
Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjpt
aW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0K
LS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCi1pbnQ2NF90IHRv
SW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5p
dHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsK
LX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxv
bmcKLXVpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5h
TnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42
NC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7
Ci0gICAgcmV0dXJuIG47CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZh
bHVlLnRvT2JqZWN0KCZzdGF0ZSkpLT5pbnRlcm5hbE51bWJlcigpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVy
dERhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnREYXRlLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0RGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisj
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29u
dmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVy
YXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAg
ICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmpl
Y3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhj
ZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9y
IElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZl
cnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lh
bGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29u
dmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlv
blRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
K3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisv
LyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZl
cnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
Ym9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFs
dWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBF
eGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNl
cHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExB
bnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
SlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
QW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVD
b252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJs
ZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFj
ZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVy
ZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisg
ICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8g
YW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFz
c2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sg
ZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFz
TnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVl
IG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLwor
ICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1
cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3
aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZv
ciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3Vy
YXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsK
KyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1l
IElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjpp
c051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQor
ICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsK
KyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
Qm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29s
ZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJy
YXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlND
OjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFy
cmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3
PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAg
ICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9
OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFw
cGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6
dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25z
dF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJP
clJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsg
cmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRy
T3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Qnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0
aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50
OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
U2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAg
ICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hv
cnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVp
bnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQx
NkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNp
Z25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRp
YyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50
b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9u
Zz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFz
SW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xv
bmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+
IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAg
ICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5p
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAg
ICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxv
YXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRp
YyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4g
eworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsK
KyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAg
ICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3Ig
TWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgp
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9X
VEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0
cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0
cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFs
dWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBl
cworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmpl
Y3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpT
VmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRl
ZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlw
ZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxv
YXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBt
b3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91
YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJp
Y0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7
CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpT
Qzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252
ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXkt
Pmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZh
YmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5s
ZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGlu
ZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1h
c2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hh
cGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50
MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJ
bnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6
OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRl
eFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShv
YmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0
KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlND
Ojphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3Qo
KS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3Qp
OworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAg
ICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMg
dGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBh
cnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAg
ICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGln
dW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwor
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZh
bHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5
KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAg
ICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8m
IGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMs
IGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29u
c3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAg
ICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBE
ZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVy
Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlm
aWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlm
aWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZp
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmco
c3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNp
bmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBW
YWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJl
c3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8v
IDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhy
b3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7
CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11d
KCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVy
dHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1l
cyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0
LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZv
ciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBP
LltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2Ny
aXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9i
amVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51
bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBE
byB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlz
IGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/
CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYg
ZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlw
ZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAg
ICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46
OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUg
YmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0
LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2
YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAg
ICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVl
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVh
ZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAg
ICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVj
dC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1
bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7Cisg
ICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJl
c3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8g
cmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAg
IC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8v
IDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisg
ICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVk
IHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFs
dWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0
byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxW
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAg
ICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5
LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwg
ZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgor
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
VDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rp
b25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGlj
dGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlv
bjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5j
dGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENh
bGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMo
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNr
IGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0lu
dGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxP
YmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBU
LCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJl
dHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdh
bmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0Pgor
ICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAg
dXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwg
Ym9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWls
OjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5
cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4u
PjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
TnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwor
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51
bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxO
dW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVz
aW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jh
c2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6
dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVt
YmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2lu
ZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVl
bmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Cisg
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1
c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVM
aXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
PT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9y
IDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVu
QXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlw
ZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBu
dW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsK
KworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7
CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZS
ZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBu
dW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlv
bmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJP
ZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAv
LyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMg
bnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0
ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhh
c051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRo
ZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBw
cmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1
bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29y
ZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rp
b25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0
aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNv
cmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBy
ZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYg
aW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNl
IHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9i
amVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRo
ZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBv
YmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJ
c0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpv
cHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZv
cl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpS
ZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAg
ICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBU
eXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisK
KyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBl
ZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAx
MC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Cisg
ICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxs
KCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgp
OworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93
aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFj
dCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9y
KS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRo
b2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3Qg
dW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0
aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVl
bmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBm
cm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAx
LiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCku
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRl
ZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0
aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5
cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBo
YXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVu
QXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5
cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0
aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNh
bGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVw
IDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNC
b29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xl
YW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElm
IFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051
bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwor
ICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051
bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBo
YXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4K
KyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3Ry
aW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVz
IGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBl
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5
cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4g
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9
IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlw
ZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2Fu
ZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2
YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRh
dGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5p
bmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1
ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkg
eworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVu
Y2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVl
ID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4o
c3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExE
YXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpT
T04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlw
ZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1
ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUs
IHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICgh
bGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
WFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsK
KyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0g
V3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6
OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJH
TCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFs
dWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25z
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1
c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1
c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZh
cmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAg
ICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6
SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAg
IHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9Owor
ICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6
VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVu
dHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXpl
X3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4g
bGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVu
YW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICgh
dmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJl
dHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRE
YXRlLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydERhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTY3MyArMjUsMTggQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJC
aW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1w
IH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBU
cmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
ciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkg
Z2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJh
dGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBw
YXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRp
b24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3Ry
aW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
U3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9i
YWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUs
IGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFs
dWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8
VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRl
ciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxh
YmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAg
ICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBl
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8
VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQg
dGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8v
IGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEg
bnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRo
IFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlw
ZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVs
c2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwu
Ci0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9v
bGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9v
bCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBz
dXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlND
OjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5U
eXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWls
IHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBU
KiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQm
PihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25z
dCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgp
OyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAg
ICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9J
bnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0
PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGlu
ZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQz
MkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQz
Migmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2
NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWdu
ZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVy
PElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAg
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZs
b2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8v
IEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
dHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2
YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAg
ICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0s
IEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJh
YmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1Zh
bHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRp
b24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVu
dGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAg
ICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0
ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAg
ICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252
ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAg
ICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAg
ICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2Nv
bEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWND
b252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRo
cm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpT
Qzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpT
Qzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0g
SlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5p
c0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91Ymxl
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwg
aSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdl
bmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYg
KCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFy
cmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2Jz
ZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJh
eS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hh
cGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91
c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0
SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBE
ZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVl
bmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBK
U0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZy
b3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96
ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owot
ICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFw
cGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRv
KiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgm
ZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0
eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmlu
Z1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0
cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3Ry
aW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJ
RExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9u
VHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8
SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJl
dHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykg
aXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5b
W093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5
cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+
Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlv
bk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAg
ICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qg
b3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8g
MS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAg
SlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlk
R2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwg
a2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZp
bmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5k
ZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8v
IGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgp
LmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUg
b2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50
aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRv
IHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBM
ZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUg
Vi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZl
cnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElm
IHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5
cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4g
TyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRo
aXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndp
c2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBL
LCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5
cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAg
ICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBl
JSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2
YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXAp
IHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVD
TUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJl
cXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50
aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJl
IHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0
byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFs
dWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9w
ZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9
IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBr
ZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDog
Y3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVh
dGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlv
bmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGlj
dGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlv
bmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9u
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMg
VCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExF
bnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhl
YywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pT
KGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFj
ayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVu
Y3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
IGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwg
Jmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVm
UHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVj
dCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
LSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAg
dXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNl
PgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250
ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5
cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5
cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6
OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBu
dW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9
IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1l
cmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmlu
Z1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMg
IT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
c2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJh
eVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBE
aWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlv
bmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
RGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFy
eSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
RGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5n
IERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhh
c0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29y
ZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBy
ZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVj
b3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZh
Y2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJp
Z2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxh
YmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5k
Ojphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1
ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExO
dWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQg
bWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBp
cyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMu
IElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25h
cnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGlj
dGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVj
b3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlw
ZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBv
YmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRl
cmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewot
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAg
ICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5
cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5
cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlw
ZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJh
d1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+
OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3Jh
cHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2Fz
dGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25U
eXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZh
bHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBv
ZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBv
cHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlz
IGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1l
dGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBS
ZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMu
IElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGlu
ZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3Ip
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VU
eXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFy
cmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVy
ZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0
IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0
aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAo
aGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxp
c3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9
IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAo
aGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUs
IGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAg
ICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAg
aWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJp
Y1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNC
b29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhh
c0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
IC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0g
dHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0g
dHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1h
a2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBs
ZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBhdXRv
IGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpK
U1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+
KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAg
ICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFy
ZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6
OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+
KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJU
KHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCitKU0M6OkpTVmFsdWUganNE
YXRlKEpTQzo6RXhlY1N0YXRlJiwgZG91YmxlIHZhbHVlKTsKK2RvdWJsZSB2YWx1ZVRvRGF0ZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7IC8vIE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3Qg
YmUgY29udmVydGVkIHRvIGEgZGF0ZS4KIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CiAgICAgc3RhdGljIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgICAgICByZXR1
cm4gdmFsdWVUb0RhdGUoc3RhdGUsIHZhbHVlKTsKICAgICB9CiB9OwogCkBAIC0xNjk5LDIwMiAr
NDQsMTEgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewogICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKIAorICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSB0YWtpbmcgYSBKU0RPTUdsb2JhbE9iamVjdCBhbmQgcGFzc2luZyBpdCB0byBq
c0RhdGUuCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgZG91YmxlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNP
TlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZShz
dGF0ZSwgdmFsdWUpOwogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBK
U0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExp
c3RlbmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExF
dmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9
IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUp
KTsKLSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0
dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25U
aHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9i
YWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci0jaWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0
eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGlj
IHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVy
QmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0
dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNl
PFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+Owot
Ci0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1
dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJl
c3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8
SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8
SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJn
dW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVu
dHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
dHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZl
cnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydElu
ZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAg
aWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9w
dCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6
Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5n
dGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkp
KTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVs
bG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnREaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0RGljdGlvbmFyeS5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERpY3Rpb25hcnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xv
YmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxl
bWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVt
IGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJh
bmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7
IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09i
amVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNp
YWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJ
REwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0
aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBl
Y3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sK
KyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVj
dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIElt
cGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUds
b2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4g
SlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQp
OworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVy
PFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwg
dHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRl
cjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNl
LCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJl
dHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0
ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXds
eUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1l
bnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55
PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJv
bmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0
KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCitu
YW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0
cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlw
ZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURM
QW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6
UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZl
cnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9i
amVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3Jt
ZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2Ug
dHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5v
dGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51
bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTog
SGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMg
bnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2
YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09i
amVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
KyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJ
bXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZl
cnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnRO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9v
bGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4o
dmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewor
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1
ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAg
ICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFw
cGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9u
VGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVy
blR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAg
ICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNw
YWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JS
ZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29u
c3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRy
T3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExC
eXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAg
ICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
Qnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExT
aG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9y
dD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5z
aWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0
YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIo
bnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNp
Z25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0
aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFs
dWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9V
SW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2lu
dCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51
bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVt
YmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6
OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRp
YyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJl
cigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJl
c3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91
YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShu
dW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVt
YmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExE
b3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGlj
IGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKwor
ICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRE
b3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExE
T01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3Ry
aW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
ICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZT
dHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRp
b24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJp
bmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVy
PElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
CisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JF
YWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpz
dGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNw
ZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25s
eSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4g
VG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3Zl
cmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBh
biBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3Qo
dmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3Qp
OworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVj
dCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJh
dG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVy
blR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2Vw
dGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdU
eXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIo
KVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGlu
ZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
RG91YmxlKClbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2Nv
cGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRl
eCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVl
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAg
ICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5
cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRl
cjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAg
ICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAg
ICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFz
dEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/
CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJ
bmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6
OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhW
YWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRl
ZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKwor
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExv
bmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7
CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERv
dWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERv
dWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBs
aXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAg
ICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVj
dCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVD
YXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZm
ZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAg
ICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAg
ICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAm
Z2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0
b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAg
ICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRl
bnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmll
clRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsK
KyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAg
fQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEss
IFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6
SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ug
b2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBv
ciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJ
ZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAo
IXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAg
CisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5
cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFt
ZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAg
ICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6
RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5
cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAg
ICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAg
ICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAg
ICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRv
cigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMg
bm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVy
YWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAg
ICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0
b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4g
SURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0
YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAg
ICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAg
ICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAg
ICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1
ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVy
PFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2
YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhh
cHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
NS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVk
VmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRW
YWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVy
biByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVj
dFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBp
bmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQ
YWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRl
ZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVw
IGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAv
LyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQg
ZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAg
ICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFs
dWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVh
dGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29s
IGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0
LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3Jl
YXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0
LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+
PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAg
eworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1l
cmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExF
bnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Cisg
ICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1l
cmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExD
YWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0
aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVj
dCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewor
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpT
Qzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRp
dGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFt
ZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsK
KyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJl
dHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCitu
YW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRp
dGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7
CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxM
aXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0
aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25k
aXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAg
ICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBl
bmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVt
ZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1l
cmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVy
aWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZv
ciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0
cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1
ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNl
cXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElE
TFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisg
ICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVM
aXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsK
KyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5
cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZS
ZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAg
IHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNS
ZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0g
KG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNp
bmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50
ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVk
ZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVy
biB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBl
ID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6
XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUg
ZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9U
RTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAg
ICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmICho
YXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAg
aWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAg
IDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAg
aWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEg
cGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJ
REwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8v
ICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFs
dWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAg
ICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAg
aWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6
dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFs
dWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZd
KGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUo
dHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9u
VHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAg
ICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAg
ICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRW
YWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxl
bWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1
cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMg
YW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpK
U0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+
aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAg
ICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRo
ZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3Vs
dCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQg
b2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNl
IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9k
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9m
IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
cmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5
IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29u
c3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhv
ZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICho
YXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVy
dGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVz
IGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNS
ZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVj
b3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxs
YmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3Rl
cCAxMi41KQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMg
b2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVh
biB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9v
bGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4K
KyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlw
ZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAg
ICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29s
ZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFz
Qm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgor
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgor
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVt
ZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7
CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0
cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAg
ICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBT
dHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUu
CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAg
ICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExC
b29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlv
bjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBU
eXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBi
cmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50
X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAg
ICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlv
bmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNo
PFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBl
bmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlw
ZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAg
IEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9K
UzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0
PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAg
ICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1
ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERh
dGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRv
dWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNP
Tj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdp
ZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpK
U09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFs
T2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExp
c3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRv
IGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdv
cmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZl
cjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVz
aW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
WFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElE
TFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xB
bnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
KTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBm
b3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJh
c2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVt
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJ
RExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25h
bDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29u
dmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJp
YWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5l
ciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAg
IHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWlu
ZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpS
ZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6
ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291
bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwg
c3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVy
PElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0
SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpW
YXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2Vk
QXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsg
aSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92
ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0
KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREaWN0aW9uYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RGljdGlvbmFyeS5oCShyZXZpc2lvbiAy
MTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREaWN0aW9u
YXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzMDAgKzI1LDE0IEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxp
dGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
Ci0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+
CisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBj
bGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNF
bXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZv
aWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBj
b2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
VCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8v
IFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVy
c2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVz
KCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxF
eGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFs
dWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
T3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYm
KTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlv
biBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVy
dEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgot
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1z
dHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
VSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwot
ICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2
YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBp
ZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxU
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51
bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
TnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJ
bnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJ
RExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0g
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9Owot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwot
ICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJz
aW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBi
ZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNh
bGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25P
YmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAv
LyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0g
ICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMu
IE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBy
dWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBj
b25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0
eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExO
dWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwotICAgIH0KLX07Ci0K
LS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0g
SlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZp
ZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBB
ZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5
cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1
c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxU
Pjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBl
clR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVj
dCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1
cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYg
Z2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+
JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQm
IGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgc3RhdGljIGlu
dDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0lu
dDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1w
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5
dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7Ci0g
ICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1
cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3Rl
dDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHN0
YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVy
biB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
TG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2
YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVy
biB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4g
ewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAg
ICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExE
b3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBu
dW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVt
YmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJs
ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3Zlcmxv
YWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFU
aW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9E
b3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3RyaW5nIHR5cGVz
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZh
bHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVU
b0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
VG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7
IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFycmF5LWxp
a2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUs
IGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShj
b252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1l
cmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhl
IElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCi0gICAgLy8gc3VwcG9y
dCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2Nv
cGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5n
IEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1
cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpT
Qzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAg
aWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6
OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAo
IWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9u
T2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpj
b252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
cnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAg
ICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5n
VHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5n
U2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGln
dW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZh
bHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVy
dGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAg
IHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pT
QXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6
Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJh
eSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFs
T2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwg
b2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgp
OwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVz
dWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdU
eXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQot
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCkt
PmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmlu
ZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0
ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4
VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOwotCi0g
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlw
ZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0
dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNl
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsK
LSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1
dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2Vx
dWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAg
ICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9y
IChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxU
PihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgYXV0byogYXJyYXkgPSBK
U0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsK
LSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBSZWNvcmQgdHlwZQotCi1uYW1l
c3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgotICAg
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVy
dGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwg
aWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNW
U3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEss
IFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwot
ICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAg
dXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEu
IExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAg
ICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0
LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmpl
Y3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCog
b2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0
eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6
OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPmdldE93blByb3Bl
cnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUu
IFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAg
ICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNj
IGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVy
dHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0
b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3Jp
cHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVz
Yy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBG
SVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3Ig
aXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlv
biBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5l
ZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4g
TGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4K
LSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVy
dGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0
IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFs
dWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAg
ICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBz
dWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBp
cyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgot
ICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94
eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQg
dG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUg
Vj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlw
ZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0g
ICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEu
IExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6
Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAg
ICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZh
bHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMg
d2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3Qg
YSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252
ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9
IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAg
ICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0
LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1
dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWly
LmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMg
dHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLX07CisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERp
Y3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwpAQCAtMTMzOSw1NjIgKzUzLDQgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPAogICAgIH0KIH07CiAKLS8v
IE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252
ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgot
ICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVy
biBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFj
a0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRl
cmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENh
bGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZh
Y2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlv
blRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVu
aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9v
bCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5U
eXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwg
ZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9u
dDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFs
RnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpm
cm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBz
dHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5n
IHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wg
Y29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29u
ZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0g
ICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNp
bmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJl
cjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVt
ZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmlj
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJp
Y1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBT
dHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29m
PElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9m
U3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0
cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2Vx
dWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxi
cmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0
YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5j
ZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElE
TFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2Vx
dWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcg
RnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96
ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46
OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAg
fHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZy
b3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96
ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdh
bmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAg
ICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExS
ZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3Jk
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVy
T2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZy
b250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNv
cmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4g
SWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwg
b3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6Omlz
X3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxs
VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5p
b24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZs
YXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZp
bmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBl
KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAg
ICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5
IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFy
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3Jk
IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxl
bWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3Qs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2Jq
ZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0
IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJ
bnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFj
aDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3Zl
Q1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAg
ICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6
UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJu
VmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAg
ICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0K
LSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAg
ICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7
Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBj
b2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhh
dCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEu
IExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVm
aW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4g
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5
cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVy
YXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVu
IGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0
IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVk
LCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4K
LSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0g
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICho
YXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFy
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFj
ayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVl
IHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42
KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVh
blR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBi
cmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAg
ICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlz
IGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmlj
VHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAg
ICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVt
ZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5
cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byBib29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJy
b3IuCi0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1
cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExV
bmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0
OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0
cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25U
eXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgo
KTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0g
ICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAg
ICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRl
Y2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBp
bmRleCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4g
OiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+
IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
UmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRl
c2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlz
T2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3Rl
bmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0g
ICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRo
TlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAg
dXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBw
ZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJL
ZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdl
YkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1u
YW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcg
SXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwot
ICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcg
SXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVy
PElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAg
ICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVz
aW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07
Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1
Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlh
ZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxl
bmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEVudW1lcmF0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0
RW51bWVyYXRpb24uaAkocmV2aXNpb24gMjExNTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRFbnVtZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291
cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5
cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVt
IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxB
c0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAg
dm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVk
IGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwor
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252
ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1
ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNW
YWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0
aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+
CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0
ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorewor
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
PFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVy
c2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElE
TEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7
CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZl
cnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBW
IGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUg
Y2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5v
bk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAg
IC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4K
KyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwg
dGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8g
My4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhl
IHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9
IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBl
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsK
KworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUg
PSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0Lgor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlC
dWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
VmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVy
Vmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6
OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+Owor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2Jq
ZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
JiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8
VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUg
VCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMg
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
Qnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsK
KyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9j
dGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
c2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAg
c3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
cmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVy
biB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9u
Zzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0
PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
CisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewor
ICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBu
dW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91
YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVy
bG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRp
YVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50
b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlw
ZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFs
dWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNP
YmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJyYXkt
bGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0
ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51
bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0
aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBw
b3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dT
Y29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNp
bmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJl
dHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAg
ICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlm
ICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmRO
b25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6
OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhp
bmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250
aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4
VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91Ymxl
VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0
ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252
ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6Omlz
SlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9i
YWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRl
LCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3Ro
KCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwor
CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVm
aW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252
ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0
YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5k
ZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5U
eXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAg
eworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0
cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQor
ICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBm
b3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pT
PFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9
IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3Qp
OworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJy
YXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisKK25h
bWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Cisg
ICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZp
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRl
LCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9V
U1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8
SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7
CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAg
ICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8g
MS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisg
ICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1
bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9i
amVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3Bl
cnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpT
Qzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJv
cGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8g
NS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Cisg
ICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0IGRl
c2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9w
ZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3Jp
cHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNj
cmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBk
ZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBv
ciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0
aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZp
bmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAx
LiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBL
LgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252
ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAyLiBM
ZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVl
ID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRW
YWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAg
ICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUs
IHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5
IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUu
CisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHBy
b3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVu
ZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFt
ZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBU
eXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkK
KyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8g
MS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4g
RDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAg
ICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQg
dmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBh
cyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5v
dCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNv
bnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1ZhbHVl
ID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisg
ICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1
bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBh
aXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBp
cyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlv
biB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFs
dWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9i
amVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSks
ICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0
eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5
cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBD
b25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1
Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlw
ZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAgIHsK
KyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5h
bWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExV
bmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0
OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBu
dW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+
LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBz
dGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5
cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09
IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJp
bmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisK
KyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJ
c0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6
dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2Ug
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5B
cnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0
LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmln
YW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFy
eVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25h
cnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25h
cnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwg
bnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29y
ZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMg
KyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+
PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUg
YW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVs
bC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlw
ZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAg
ICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNO
dWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5
cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3Rl
ZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMg
bnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8
IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGlj
dGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5
cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBl
LCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVj
b3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRo
ZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlw
ZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEg
cmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGlu
Y2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJl
bmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5
cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJy
aWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7
CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0
eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBl
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVy
Q2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6
OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3Rl
ZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0
ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3Qs
IHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVl
LmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0
aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBv
ZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVj
dC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0
eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBA
QGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFi
cnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhv
ZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20g
ViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5
cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNT
ZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRl
cmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0
KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlz
IG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20g
ViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96
ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5U
eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwg
aGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0
aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBl
LCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNv
cmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFj
ZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0
IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1l
PElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9vbGVh
blR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1
ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVy
aWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEg
c3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6
OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3RyaW5n
VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmlu
Z1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051
bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhh
c051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAg
IC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFuVHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5U
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3LiBU
aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNp
bmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUg
VHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVu
Y2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlv
blR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJ
bXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4ID0g
dmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiBy
ZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRv
JiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZB
bmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYg
KEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVM
aXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAw
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0
VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBU
OjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051
bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0
ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVh
dGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAg
ICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJl
ZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUg
b2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lmIEVO
QUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZl
cnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisKKyNl
bmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNv
bnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2Ugewor
ICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewor
ICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiByZXN1
bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+
IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJ
RExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+Owor
CisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5k
ZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOworICAg
ICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1l
IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFk
aWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sK
KyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChzdGFy
dEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKwor
ICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5l
ciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3Rh
cnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsg
KytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsK
KyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0K
KworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydEVudW1lcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0RW51bWVyYXRpb24uaAkocmV2aXNpb24gMjExNTQ4KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RW51bWVyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTMyMiArMjUsMTkgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJC
dWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBm
cm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0K
LXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhy
b3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0
aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9u
YXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkg
Z2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0v
LyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0
aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pT
KEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVk
c1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0
ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJl
dHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1Zh
bHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8
SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBl
Pjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewot
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46
OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBE
ZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4g
SWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZh
bHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRv
IGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24K
LSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRo
ZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0g
ICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIu
IE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElE
TCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5u
ZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxh
YmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2Jh
bE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0
aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6
bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4g
ewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVh
bj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIg
c3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5
QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVy
KjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBU
eXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBl
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsK
LSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQq
PihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25z
dCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAu
Z2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29u
c3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRy
T3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
SW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9j
dGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsK
LSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNo
b3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZz
dGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9u
Zz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAg
IHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsK
LQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAg
ICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMy
KCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMg
aW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0
YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1l
LgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0
cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmco
JnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
T01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmlu
Zz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBK
U0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1l
c3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVj
dCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
VmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNP
YmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVz
dWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNW
YWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2lu
dFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVy
aWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQg
dGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0
cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3Qg
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRl
ciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0Fy
cmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9i
amVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
LQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNo
YXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5
KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJh
eUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0
IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5k
ZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6
UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZl
Y3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBu
dWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJy
YXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4g
SlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZp
ZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVy
PElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVy
dGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlk
ZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlw
ZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUg
PSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBh
IG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5
cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBl
RXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFz
T2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0g
ICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAg
ICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
ICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFj
aCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3du
UHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
Y3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICgh
ZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1d
IGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQg
YnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAg
ICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRv
ci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUg
a2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAg
IGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQo
c3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQo
Tywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252
ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5
cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkg
aW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAg
Ly8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBw
aW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAh
IE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJl
cGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBl
c0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAg
ICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkg
dG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAg
ICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01B
U2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBM
ZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVl
KS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7
Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4o
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElE
TCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRp
b25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rp
b25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Cisv
LyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZl
cnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEVu
dW1lcmF0aW9uIHR5cGUKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7
CiAgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKQEAgLTEzNTksNTQyICs1Niw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjwKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFj
ayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVu
Y3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAg
IGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwg
Jmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVm
UHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVj
dCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1
cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
LSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAg
dXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNl
PgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZyb250
ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5
cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5
cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6
OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBu
dW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9
IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1l
cmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmlu
Z1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMg
IT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5
cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMg
PT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
c2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJh
eVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBE
aWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlv
bmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
RGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1
ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFy
eSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
RGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5n
IERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhh
c0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29y
ZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBy
ZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVj
b3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZh
Y2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJp
Z2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxh
YmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5k
Ojphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1
ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExO
dWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQg
bWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBp
cyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMu
IElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25h
cnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzRGlj
dGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFzUmVj
b3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlw
ZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBv
YmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRl
cmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewot
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAg
ICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5
cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5
cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlw
ZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFJh
d1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+
OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3Jh
cHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICghY2Fz
dGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25U
eXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZh
bHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBv
ZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBv
cHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlz
IGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1l
dGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBS
ZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMu
IElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGlu
ZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3Ip
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VU
eXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9k
KFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVy
bklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYg
bWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0
eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFy
cmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rp
b25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMg
YSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBo
YXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVy
ZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0
IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0
aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAo
aGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxp
c3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAg
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9
IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAo
aGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUs
IGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAg
ICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAg
aWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJp
Y1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNC
b29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhh
c0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAg
IC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0g
dHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0g
dHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1h
a2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBs
ZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBhdXRv
IGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpK
U1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+
KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAg
ICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFy
ZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6
OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+
KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJU
KHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAg
IHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUs
IHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgm
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJpYWxp
emVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDog
SlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVudCBM
aXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlzdGVuZXIg
PSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRl
KSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJl
dHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVz
b2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRp
YyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFj
ZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsK
LQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
dXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNl
PElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVy
dGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9y
PEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFy
Z3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1l
bnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252
ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJ
bmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAg
IGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxv
cHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46
OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVu
Z3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8
IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChp
KSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51
bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkp
OwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaAkocmV2aXNpb24gMjExNTQ4
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRFdmVudExpc3RlbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5n
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVu
dGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmpl
Y3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1
ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWws
IEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93
ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwor
CisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29u
dmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQg
Y29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Qg
Y2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3Vy
YXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNp
b24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRl
cjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0
ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46
OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFs
dWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8
VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
VDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAg
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25v
d24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxl
IHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlw
ZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVy
PElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51
bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVs
bGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYp
IGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVp
bmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmli
dXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRo
YXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4g
dGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAg
IC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNl
LCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxl
IHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlw
ZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAg
IH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Cisg
ICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Cisg
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
VDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51
bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3Qp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3Rh
dGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0Lgor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlC
dWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Cisg
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKwor
Ly8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5
cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewor
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJ
bnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
ICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVl
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307
CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4m
IHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5
cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRp
YyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+
IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7
CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExM
b25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGlu
dDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExM
b25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1
aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxv
YXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5p
dGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAg
fQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
ZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFs
dWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGlu
ZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRp
YyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVy
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewor
ICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsK
KyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5y
ZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Cisg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFz
RW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChj
b25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxB
c0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hl
KCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVj
dCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9u
VGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRh
aWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlw
ZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNP
YmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAg
ICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6
Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5k
IElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywg
YWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAg
Ly8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50
cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6
OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNB
cnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlz
QXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSBy
aWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXkt
PmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGln
dW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhW
YWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25h
bihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0
RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
IHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisK
KyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsK
KyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9u
IHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZp
bmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZs
b2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6
U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAg
ICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQp
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZn
bG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExG
cm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikK
KyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywg
bnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVj
dENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7
CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBW
PiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNv
cmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5h
bWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1l
IFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5
IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBV
bmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAg
ICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFs
dWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8g
NC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
KTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBr
ZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQg
a2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlz
KSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1d
KGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwor
ICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNj
cmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJ
ZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sg
Zm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVm
YXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYg
KCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFi
bGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVy
dGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBl
ZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5
KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgor
ICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBh
biBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9
IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQs
IHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBU
aGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVk
S2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRL
ZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExS
ZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3Jl
YXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3Ig
ZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtl
eSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUs
IHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAg
ICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAg
Ly8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFs
dWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVk
IGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAg
ICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAg
ICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0
dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGlj
dGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9u
YXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9u
PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVm
UHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpT
Qzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFj
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6
OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50
ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6
Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlw
ZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBU
LCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgor
c3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwg
Ym9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRy
dWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsK
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3Vz
aW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8
TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQu
Li4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVM
aXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVt
YmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxz
byBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
KyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwg
bnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmln
YW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAg
ICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3Qs
IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRp
b25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAh
PSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rp
b25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5
cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERp
Y3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3Jk
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6
Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMg
IT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBl
TGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2Jq
ZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsK
KworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0
eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwg
dGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGws
IGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlw
ZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAg
ICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAg
ICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAg
ICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAg
ICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAg
ICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4g
SWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgor
ICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0
aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAg
ICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIp
CisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdh
bmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+
IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlw
ZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNl
PGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBs
ZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAg
ICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAg
ICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1
dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJu
VHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDEx
LiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVj
dFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAg
ICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAg
aWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcg
dXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92
ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlw
ZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJl
IHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVy
YXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0
aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhl
IHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZy
b3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlU
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRl
cmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1
ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVz
IGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVm
ZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBp
cyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6
dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZh
bHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJv
b2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1
ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVy
aWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5k
OjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1l
cmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVl
ICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmlj
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVt
ZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEg
Ym9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVh
bi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUo
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Cisg
ICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJ
bXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNl
cXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdU
Rjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkK
KyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5k
Ojpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2lu
ZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46
OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5W
YWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
VG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlw
ZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpK
U09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGlj
IFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJp
YWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0
ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47
CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAg
ICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2Us
IGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4g
bGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29s
dmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJU
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xh
c3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFw
cGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisg
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFp
bCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3Ry
dWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFt
ZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0
KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZl
cnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBW
YXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlw
ZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2lu
ZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7Cisg
ICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJ
RExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5h
cmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJl
dHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRp
Y0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZN
b3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVu
ZXIuaAkocmV2aXNpb24gMjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNzI5ICsyNSwx
MSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
LSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1l
bnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBj
bGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5n
ZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmpl
Y3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlv
bmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0
ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBs
ZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3Jl
YXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsK
LQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRy
dWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwg
ZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlD
cmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50
YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25n
PEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFu
eT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJl
dHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJz
aW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmpl
Y3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVk
Ci0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5
cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3Rh
dGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxs
YWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhh
bmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFs
dWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmpl
Y3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0
ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xl
YW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZh
bHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZm
ZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBS
ZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0Lgot
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBl
ZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5U
eXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVm
KGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9y
UmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJu
IHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0
ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5
dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hv
cnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0
aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51
bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGlj
IHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVu
c2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUlu
dDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQg
dHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1i
ZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkp
Ci0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJl
ciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjpp
c2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewot
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIo
JnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0
cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJs
ZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVt
YmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91
YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBp
bmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBk
b3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91
YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
Ci0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0
aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
JiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQot
ICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlw
ZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFj
aEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3Rh
dGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVj
aWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkg
aW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRv
IGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJs
b2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4g
RXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZh
bHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
LQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3Qp
OwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRv
clByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5U
eXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRp
b24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlw
ZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRl
eFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0Rv
dWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3Bl
LCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgo
JnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAg
dXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBl
PjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAg
ICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAg
IGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93Pwot
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5k
ZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpD
b250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFs
dWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5n
ZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25n
Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJu
VHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3Vi
bGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVt
cGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlz
dC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAg
cmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3Qs
IGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2Fw
YWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAg
IGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAg
ICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmds
b2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9y
RnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
UmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRl
bXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRl
bnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50
aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJU
b0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0g
ICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0K
LSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBW
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46Oklt
cGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVt
ZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9m
IHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3Ig
TnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYg
VHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAot
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMg
YmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVB
cnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAg
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVu
dW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMg
aW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAg
ICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAg
ICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAg
Ym9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Io
JnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5v
dCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFi
bGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAg
ICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9y
LnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAg
ICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElE
TCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFp
bDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAg
ICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAg
ICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
IC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUg
b2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxW
Pjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFs
dWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBw
ZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBI
YW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUu
IE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZh
bHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFs
dWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4g
cmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQ
cm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgm
c3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5n
IChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFp
ciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQg
dG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBp
cyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8g
YW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVz
VmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAg
ICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVl
UGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRl
RGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBj
cmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4g
QXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0
ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4K
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9u
YXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJh
dGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51
bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAg
IHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJh
dGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3Qo
dmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0
YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6
OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBV
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYo
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRp
b25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUg
VD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0g
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1
cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRp
b24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewot
ICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlz
dCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlv
bmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0
aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5h
bWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVy
aWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJp
Y1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmlj
VHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3Ig
SURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdh
bmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJl
ck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBj
YW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBT
dHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJp
bmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNl
cXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1
ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2Vx
dWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmln
YW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZy
b3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAg
IHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlz
dD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0g
MCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBk
aWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0g
ICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBl
TGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBi
cmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVj
b3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1
c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVj
b3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5n
IEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVy
ZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVz
IGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4g
dGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9
IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8x
Pj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZs
YXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6
IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAg
ICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFz
RGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlm
IChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAy
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlm
IChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBS
ZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBs
YXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURM
IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAg
ICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVl
IHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAg
IChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlm
IChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZh
bHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVl
OwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShh
dXRvJiYgdHlwZSkgewotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5
cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5
cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAg
dXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAg
dXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFs
dWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1l
bnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAg
ICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJu
VmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFu
eSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlND
ZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUg
dmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQg
b2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBv
ZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJ
dGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBT
ZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBH
ZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
Mi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3Jl
YXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBv
ZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAh
PSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
SXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
RnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRp
bmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVj
b3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29y
ZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
KEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAg
MTIuNSkKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9i
amVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRo
ZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4g
dmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xl
YW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0g
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVM
aXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAg
ICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVh
bigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jv
b2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAg
ICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVy
aWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJp
bmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAg
ICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3Ry
aW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgot
ICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAg
aWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9v
bGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0K
LSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlw
ZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlv
blR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJp
Z2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9z
aXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAg
ICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25h
bDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxT
ZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5h
bWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7
Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8
YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJ
Ojp2YWx1ZT4odmFyaWFudCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAg
ICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUo
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRl
PiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3Vi
bGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+
IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5
KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNP
TlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9i
amVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IEV2ZW50IExpc3RlbmVyIHR5cGUKLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0
ZW5lcjxUPj4gewogICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CiAKQEAgLTE3NjMs
MTM4ICs0NSw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SUQKICAg
ICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
ICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBh
dGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdl
YkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3Ig
dmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJ
bnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJ
dGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVy
dGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9
IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNp
emVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+
IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1
bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90
IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQo
KTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3Rk
OjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElE
TFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5k
ZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwg
c3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgq
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCShyZXZpc2lvbiAyMTE1NDgp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxp
dGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4g
SW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisK
K2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZv
cmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNp
b24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUg
Zm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rk
OjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9u
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZy
b20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRl
JiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
ZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQor
eworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBl
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRp
b25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExB
bnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxl
Q29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBu
b3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBl
cmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3
aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlz
IGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJ
REwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBO
T1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBl
IFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4K
KworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVs
bD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBi
b29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9v
bGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBs
YXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVy
PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFy
cmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3Vw
cG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJm
YWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpU
b1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
UmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCitu
YW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQ
dHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVy
biBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7
IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50
MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Cisg
ICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9J
bnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAg
IHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0lu
dDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5n
IHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3Vi
bGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKwor
ICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51
bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxv
YXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAg
c3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJs
ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmlu
aXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBz
dGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAg
fQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5
dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1
cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5
U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmln
dXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0
eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlw
ZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6
OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1l
IElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0
KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAg
IGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2
bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
Ly8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExM
b25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBh
biBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRh
a2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXko
b2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQg
ZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRl
eGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJ
bnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUg
fHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDAp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91
YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVj
dEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Cisg
ICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29u
dmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAg
ICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVz
dWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0
aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBK
U0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBK
U0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGlu
ZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgp
OworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3Vi
bGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5l
Q2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Cisg
ICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFs
T2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
ZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlu
bGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAg
ICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkp
OworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxw
dHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25z
dHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisK
KyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4g
eworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmlu
Zz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAg
ICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3Ry
dWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEss
IFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6
OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0
YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZp
bmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8v
IDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsK
KyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExl
dCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Cisg
ICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywg
SlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBv
ZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewor
ICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkp
LgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAg
ICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRv
cikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVz
YyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBl
bnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQK
KyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVz
Y3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0
byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkg
PSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisK
KyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAg
ICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURM
IHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252
ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQg
aXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBj
YW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwg
dHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0
eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4g
UmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSgl
T2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2gg
bWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlW
YWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29u
dmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlz
IHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAg
ICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIu
IExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgor
ICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBr
ZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAh
IENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAg
IGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAg
IC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiBy
ZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25h
cnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
RW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0
RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxU
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFz
T2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVh
dGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFj
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0
ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3Qg
Q29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1
ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVj
dCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wg
Y29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgor
ICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZy
b250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBD
b25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3Qs
IGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
eworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9
IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5k
OjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9m
TnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hl
Y2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5k
OjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMg
PSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJl
ck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5
cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAh
PSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9u
YXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmln
YW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7
CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3Qs
IGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5
cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsg
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAg
ICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBp
bmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVs
bFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmln
YW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJl
IHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAv
LyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAg
CisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAg
aWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAg
ICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAg
ICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYg
aXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4g
dGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAg
ICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAg
ICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpf
MT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0
PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNs
dHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNh
c3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUo
SW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYg
ViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBK
U0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChj
ZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQor
ICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRo
YXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRo
ZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUg
cmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2Vx
dWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JN
ZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1
bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4g
YXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9y
TWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYg
dHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFu
ZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNs
dWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBC
b29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29s
ZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVl
OworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFu
LCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRo
ZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5
cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6
ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5
cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
MTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAw
OworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMg
dHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xl
YW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisg
ICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVz
aW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5j
ZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZh
cmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAg
eworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9y
X2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9
IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBl
Ojp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RG
OjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisK
KyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
LnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0
ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0
cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQ
dHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZn
bG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2
ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAg
IGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJy
ZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFS
SzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExX
ZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBw
b3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVy
dGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBW
YXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURM
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisK
KyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9w
dGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1l
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29u
dGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENv
bnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1l
bnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4g
eyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252
ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
c3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRh
aWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShy
ZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEluZGV4ZWREQi5oCShyZXZpc2lv
biAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRJbmRl
eGVkREIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTc4MiArMjUsMTMgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3Qu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAt
PiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsK
LQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVu
Zm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3RydWN0IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXIm
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotCi0v
LyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVy
c2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29k
ZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hh
ciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRo
aXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0g
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRp
b24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17
Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3Vy
YXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxF
eGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENvbnZlcnNpb24g
ZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVy
YXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
LCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0
aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUp
Ci17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4o
c3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUu
cmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6
SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQW55IHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVy
PElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5
cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
LSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKLSAgICAg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsK
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElE
TEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxh
YmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBUeXBlKFYpIGlz
IG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcg
cGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRl
IHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAgIC8vIHRoYXQg
aXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhl
IElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAvLwotICAgIC8v
IE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3RoZXJ3aXNlLCBp
ZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5
cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBU
LgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotICAgIH0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxF
eGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAg
dXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
SlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAg
fQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6
ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExO
dWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBzdGQ6Om51bGxw
dHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJL
OiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGlj
IGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNC
b29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZm
ZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwotfTsKLQotLy8g
QXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVy
blR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVkIGFycmF5cyBz
dXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewotICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRv
cj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRl
cmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46
OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAg
ICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsK
LSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0K
LW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdl
dFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHAp
IHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlZ2VyIHR5cGVz
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAg
ICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHN0YXRpYyBp
bnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDE2KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsK
LSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjp0
b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0g
ICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25n
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3RhdGljIGludDY0
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRv
SW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25n
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0YXRpYyB1aW50
NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRmxvYXRp
bmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRv
dWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQot
Ci0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
bnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExG
bG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUu
dG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91
YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBk
b3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVyID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmlu
aXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAg
IHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0
cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChj
b25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxB
c0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25m
aWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE9iamVjdCB0
eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFjZSBEZXRhaWwg
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5h
bWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmpl
Y3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAg
ICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0m
IHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJWE1FOiBUaGlz
IGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElE
TExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRk
IGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Ci0gICAgLy8g
dGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFz
T2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwg
b2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJh
eShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJy
YXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAg
ICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVD
YXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdo
dCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmlu
ZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYg
KGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtp
XS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91
c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1
ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihk
b3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGly
ZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghaW5k
ZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsK
LSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWND
b252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7
Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAg
ICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAg
ICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90
b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVy
aWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSBy
ZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRv
IHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAm
IEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUg
PT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRl
eFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVk
KCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAot
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5
cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
fTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5j
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2Vx
dWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7
Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihl
eGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3Ry
dWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8
VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0g
SlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7
Ci0gICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJh
eSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAg
ICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElk
ZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmll
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZl
cnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUs
IGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
aWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VT
VlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxL
LCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsK
LSAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAg
IHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAx
LiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAg
ICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3Vs
dC4KLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2Jq
ZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBl
IHJlc3VsdDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVy
dHlLZXlzXV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlND
OjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9w
ZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1
LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAg
ICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVz
YyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3Bl
cnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlw
dG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2Ny
aXB0b3IpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQot
ICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRl
c2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
RklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9y
IGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRp
b24gbW9kZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmlu
ZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEu
IExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsu
Ci0gICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZl
cnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExl
dCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUg
PSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZh
bHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAg
ICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwg
c3ViVmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkg
aXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4K
LSAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJv
eHkgb2JqZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5k
IHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1l
IFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5
cGU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQot
ICAgIHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAx
LiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAg
ICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAK
LSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBE
OgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAg
ICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2
YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFz
IHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90
IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29u
dmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUg
PSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAg
ICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3Vs
dCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5w
dXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFp
ci5rZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlz
IHRydWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252
ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9u
PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9u
IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFj
a0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1
ZS5pc0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2Jq
ZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0
ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
Q2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENh
bGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwg
Jmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlw
ZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENv
bmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVj
dCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBl
ID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewot
ICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFt
ZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVu
aW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlz
dCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6
dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51
bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlw
ZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25h
bEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4u
Ci0gICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0
ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlw
ZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0g
MCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmlu
ZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQot
ICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51
bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRp
b25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsK
LQotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFy
cmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJy
YXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2lu
ZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3Qs
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdh
bmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5
VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0
YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rp
b25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5
VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFy
eVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFy
eVR5cGU+OwotCi0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+
Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBu
dW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3Jk
VHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAr
IG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+
OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBh
bmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxs
LgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBl
TGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAg
ICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051
bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlw
ZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVk
IHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBu
dWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwg
aGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0
aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlw
ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUs
IGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNv
cmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhl
bjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBl
IHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSBy
ZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5j
bHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVu
Y2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlw
ZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAg
ICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJp
Z2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAg
ICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsK
LSAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5
cGVuYW1lIFR5cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJD
bGFzczsKLQotICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6
dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVk
VmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3Rl
cHMgNSAtIDEwLgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwg
dGhlbjoKLSAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUu
YXNDZWxsKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRo
ZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9m
IHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0
LiAKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBA
aXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJy
dXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9k
IGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBW
IGFuZCBtZXRob2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlw
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1Nl
cXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVy
YXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQo
bWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMg
bm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBW
IGFuZCBtZXRob2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3pl
bkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5
cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBo
YXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rp
b25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUs
IGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29y
ZCB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNl
IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4g
dGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3Qg
YW5kIHN0ZXAgMTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8
SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFu
VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVl
ICE9IDA7Ci0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZh
bHVlLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJp
Y1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBz
dHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6
c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdU
eXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5n
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVt
ZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFz
TnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAg
Ly8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRo
cm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2lu
ZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBU
eXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5j
ZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9u
VHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IElt
cGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2
YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJl
dHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8m
JiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFu
ZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAo
STo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxp
c3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFs
dWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDAp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6
OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVs
bCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3Rl
bmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0
ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAg
ICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVm
UHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBv
YmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKKyNpbmNsdWRl
ICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnRCYXNlLmgiCiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0
eXBlCituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETElEQktleT4gewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKQEAgLTE4MTMsODggKzQ0LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SURCS2V5PgogICAgIH0KIH07CiAKLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IElETFdlYkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMV2ViR0xBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlKTsKLSAgICB9Ci19OworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0
aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKLSAgICAg
ICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAg
ICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47Ci0KLSAgICAgICAgc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byogcmVzdWx0ID0g
Q29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7Ci0g
ICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlw
ZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKLQotICAg
ICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4Owot
ICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKLSAgICAgICAg
fTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRh
aWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJn
dW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCi17Ci0gICAg
c2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAgICBpZiAoc3RhcnRJbmRl
eCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07Ci0KLSAgICB0
eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVz
dWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5k
ZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkg
ewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgICAgICBp
ZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07Ci0gICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydElu
dGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydEludGVyZmFjZS5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydEludGVyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVy
U291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklE
TFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Citl
bnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51
bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Cisg
ICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
KworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBj
b252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVu
dW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25W
YWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sK
KyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4g
SlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1l
cmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBj
b252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUs
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmpl
Y3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNl
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChz
dGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7
CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9w
YWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3Rh
dGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2
YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRl
LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
eworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
K30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFs
dWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1
Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
PElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAg
IH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFi
bGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5
cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNv
bnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0
byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFi
bGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVh
dE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwor
ICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVy
ZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5l
ZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAg
Ly8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcg
dGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlw
ZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0
YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJh
Y3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJs
ZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVy
PElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0
eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5
cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0
LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVm
ZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVm
ZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVu
YW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+
OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwor
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAg
eworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
b2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7
IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsg
fQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQ
dHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFj
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0
aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+
IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Cisg
ICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAg
ICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQz
Ml90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVt
YmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0K
KworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3Rh
dGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVu
c2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25n
TG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZs
b2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
eworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAg
IHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBv
dmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChN
ZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcg
dHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5p
c051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1
cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2
YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4g
dmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6
YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJy
YXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZz
dGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsK
KyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9y
IG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZv
ciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBz
dXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhy
b3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAg
dXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBl
PjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAg
ICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAg
IGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RB
bmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0
ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93Pwor
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5k
ZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5k
ZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpD
b250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMy
KCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGlu
ZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5n
VHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91
YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWND
b252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6
OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkq
IGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5n
bG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJs
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0
YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVu
Z3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYg
KCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNr
OworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBl
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJm
bHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1Vu
ZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgo
JnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
aW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7
CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1
cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8Pgor
ICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+
OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2Vx
dWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisg
ICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8
VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWls
OjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJh
eTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9y
KQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJh
eSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxp
c3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywg
YXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisK
K25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+
CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0
YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsK
KyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
Ly8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4u
CisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiBy
ZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90
IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blBy
b3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0s
IEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3du
UHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUo
KSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
Ly8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6
CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0
IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQ
cm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVz
Y3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBk
ZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFu
ZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVk
LCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1l
cmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5k
ZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlw
ZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJD
b252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAy
LiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZh
bHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlw
ZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAg
ICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3Rh
dGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVk
S2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFs
dWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBh
IHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2Fz
ZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFw
cGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBN
YXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1h
cCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAg
Ly8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkg
aW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAg
ICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3Jp
cHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVk
LCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIs
IG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1Zh
bHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwor
CisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShy
ZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3Vs
dC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1
ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRl
ZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
Y29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5j
dGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248
VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICgh
dmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2Jh
bE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1
ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVy
blR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVj
dCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBz
dHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcg
dHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAg
IHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlw
ZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJ
RExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVM
aXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlz
dD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8
fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmlj
IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0
aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+Owor
CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9u
PFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmlu
Z1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVz
ID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBz
dHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0
Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8
fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVu
Y2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0g
MD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5
cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96
ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVM
aXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9u
YXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxi
cmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlv
bmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZE
aWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlv
bmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rp
b25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rp
b25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVM
aXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAg
fHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1Jl
Y29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5j
ZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlw
ZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6
XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5
cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
bnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8
VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAg
ICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBo
YXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVy
IHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBl
Y3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBl
IHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
ZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFy
eVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlU
eXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFz
UmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3Qs
IHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2Ug
dHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlz
IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVz
IGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVm
ZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55
PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAg
IGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5
cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUg
PSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJU
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFw
cGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5
cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNh
c3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZh
bHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmpl
Y3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAo
dmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZh
bHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6
ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAv
LyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9i
amVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChW
LCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5J
ZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1l
dGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZy
b20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBi
b29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVy
blR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBo
YXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBA
aXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJy
dXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9k
IGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZy
b20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNG
cm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1
cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQ
YXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlw
ZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBk
aWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlw
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlU
eXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNv
cmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBy
ZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNv
cmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVy
ZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0
dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2Jq
ZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgor
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19z
YW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9v
bGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2
YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51
bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdh
bmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3Ry
aW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJh
bWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0
cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8g
MTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhh
c051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUs
IGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAg
ICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFu
VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xl
YW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3
LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAg
dXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5h
bWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5h
bWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2Vx
dWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRh
dGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4
ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVl
PiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShh
dXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3Zl
Q1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAg
aWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5W
YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5
cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlh
bnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVy
blZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsK
KworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRp
YyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVl
LCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09O
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpq
c051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5l
ciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRM
aXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAg
ICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpj
cmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Cisg
ICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5
cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisK
KyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWls
IGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2Ug
eworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4g
eworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAg
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiBy
ZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5
cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+
OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50
SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwor
ICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVu
YW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFy
aWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkK
K3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChz
dGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsK
KworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRh
aW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0g
c3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQg
fTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAg
IH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydEludGVyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydEludGVyZmFjZS5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRJbnRlcmZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNDExICsyNSwxMyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZl
clNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJ
RExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29u
dmVydEJhc2UuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVk
ZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pT
T05PYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20g
SlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3Ry
dWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlv
blRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25h
cnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnko
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENv
bnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlND
OjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3Rh
dGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
QW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0
Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7
Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0K
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51
bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0
dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29u
dmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBU
eXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUg
aXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4g
YXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAg
IC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiBy
ZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAv
LwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3Ro
ZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51
bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJ
REwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qp
OwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAg
fQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRo
cm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+
PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8
VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2Jq
ZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVl
KSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBz
dGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxs
cHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0g
ICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBw
b3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6
QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZm
ZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwot
fTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3Jh
cHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVk
IGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6
OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJbnRlcmZhY2UgdHlwZQordGVtcGxhdGU8dHlwZW5hbWUgSW1wbGVtZW50YXRpb25DbGFz
cz4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IHsKICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwpAQCAtNDM4
LDcgKzQwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKICAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwogICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgICAgIFJldHVyblR5cGUgb2JqZWN0
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCkBAIC00NzMsMTQyOCArNzUsNSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogSW50
ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9j
dGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAg
ICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAg
IHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVy
biB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0
YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBz
dGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7
Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5s
aW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6
OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIp
OwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1i
ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRp
YyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91Ymxl
IG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgh
c3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
dW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmlu
Zz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01T
dHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVh
dE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5
dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4g
ewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVT
VlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3Bh
Y2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVj
dG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmpl
Y3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
LSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0
XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1
ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBG
SVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5
cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMg
dHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhh
dAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBh
cmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5
KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZl
cnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBK
U0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVj
dCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQot
ICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50
cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
cyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9
IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250
aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewot
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCkt
PmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBl
KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVy
Zmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0
ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGlu
ZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9i
amVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4
Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhp
bmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5k
ZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpq
c1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExM
b25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7
Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZl
cnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0
dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBE
ZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3Rv
cikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBl
bGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxs
cHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2
ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXko
JmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlND
OjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElE
TERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
ewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVy
PElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50
aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlw
ZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
SURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9
IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0
eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5l
dyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUo
TykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJy
b3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAg
ICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAg
IEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6
U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZz
dGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBl
bGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5
IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJv
cGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3Jp
cHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3du
UHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlk
R2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
Ly8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlz
IHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRv
IGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkg
dGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAg
ICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5l
bnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5
IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1
dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3Rh
dGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywg
a2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRl
LCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0
ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVk
VmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4g
cmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8g
Tm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5n
ICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7
IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9i
amVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVh
dCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tl
eSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAv
LyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8g
YmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAg
ICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2Ny
aXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQg
Y3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4K
LSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6Oklk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0K
LSAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYg
ZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51
bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVt
ZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rp
b248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0
eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJ
bnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxs
YmFja0ludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhE
ZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlw
ZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJs
ZWQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJl
dHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgVCwgdHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5h
bWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4g
ewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxM
aXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExp
c3Q+OwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBD
b25kaXRpb25hbEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9
IHZvaWQ7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRp
b24+Ci11c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25h
bEZyb250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2lu
ZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1l
cmljVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdh
bmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlw
ZXMgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxp
c3QsIG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3Ry
aW5nLCBicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
U3RyaW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdU
eXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5p
b24uIik7Ci0gICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlw
ZUxpc3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6
Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7Ci0gICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5
cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5B
cnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5
PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96
ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7
Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJy
YXkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0g
Q29uZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
RGljdGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rp
b25hcnlUeXBlcyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5n
IFJlY29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxi
cmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3Jk
VHlwZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29y
ZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVj
b3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGhhc09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5B
cnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVz
KSA+IDA7Ci0KLSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUg
dW5pb24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRl
ZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHBy
IGJvb2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJ
RExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7
Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4g
TGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBl
LgotICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRl
ZC4KLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhl
bjoKLSAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4K
LSAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4K
LSAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywg
dGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmpl
Y3QgVi4KLSAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiBy
ZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4K
LSAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0
ZXAgNC4yKQotICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFj
ZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1
cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVy
ZmFjZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0
dXJuVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJl
ZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNp
bmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
OwotICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBl
OwotICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAg
ICAgICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUp
OwotICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9
IFJldHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAg
ICB9KTsKLQotICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAg
ICAvLyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmICho
YXNPYmplY3RUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAg
ICAgICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAg
ICAgICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkg
bWFraW5nIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhh
dmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVl
bmNlIHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1l
dGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51
bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2Vx
dWVuY2VUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0g
aGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkg
dHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9k
IGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAg
ICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3pl
bkFycmF5VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9
IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlv
bmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVy
ZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBp
cyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIu
IElmIFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byBib29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9
IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6
Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1i
ZXIgdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51
bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBudW1lcmljIHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0g
YnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAo
aGFzTnVtZXJpY1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29u
c3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+
Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEg
bnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1
cm5UeXBlKCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQu
Li4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAg
dXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1
c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90
PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZh
cmlhbnQpCi0gICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0g
ICAgICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAg
YnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAg
ICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUo
dHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSk7Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IHJldHVyblZhbHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0
ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExK
U09OIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAg
IHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VD4gdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxp
emUoc3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVm
UHRyPFQ+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAg
ICB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkp
OwotCi0gICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3Qs
IGZhbHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0g
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAg
cmV0dXJuIGxpc3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRo
TlNSZXNvbHZlciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29s
dmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBX
cmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3Jh
cHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6
OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmpl
Y3QpKQotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElE
QktleSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZh
cmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAot
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0g
dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6
bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0g
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVy
dGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRl
bSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAg
ICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1
bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252
ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0g
c3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAg
ICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6
VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8g
dmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAg
ICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0
aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SlNPTi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEpTT04uaAkocmV2aXNp
b24gMjExNTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQu
aDoyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRKU09O
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5n
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVu
dGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmpl
Y3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1
ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWws
IEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4
Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93
ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwor
CisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29u
dmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQg
Y29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Qg
Y2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3Vy
YXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNp
b24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29u
dmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRl
cjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0
ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46
OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFs
dWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8
VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
VDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAg
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25v
d24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxl
IHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlw
ZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVy
PElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51
bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVs
bGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYp
IGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVp
bmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmli
dXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRo
YXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4g
dGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAg
IC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNl
LCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxl
IHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlw
ZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAg
IH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Cisg
ICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Cisg
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
VDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51
bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3Qp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3Rh
dGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0Lgor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlC
dWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7Cisg
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKwor
Ly8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5
cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4gewor
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJ
bnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
ICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVl
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307
CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4m
IHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5
cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRp
YyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+
IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7
CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExM
b25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGlu
dDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExM
b25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1
aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxv
YXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5p
dGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAg
fQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
ZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFs
dWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGlu
ZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRp
YyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVy
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewor
ICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsK
KyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5y
ZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Cisg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFz
RW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChj
b25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxB
c0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hl
KCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVj
dCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9u
VGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRh
aWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlw
ZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNP
YmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAg
ICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6
Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5k
IElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywg
YWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAg
Ly8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50
cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6
OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNB
cnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlz
QXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSBy
aWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXkt
PmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGln
dW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhW
YWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+
Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25h
bihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0
RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgh
aW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252
ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
IHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisK
KyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsK
KyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9u
IHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZp
bmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZs
b2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAg
ICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6
U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBp
bmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAg
ICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQp
KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZn
bG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExG
cm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6
OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikK
KyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywg
bnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVj
dENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7
CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBW
PiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNv
cmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5h
bWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1l
IFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5
IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBV
bmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAg
ICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAg
ICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFs
dWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8g
NC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQ
cm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdz
KTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBr
ZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQg
a2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlz
KSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1d
KGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOwor
ICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0
eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNj
cmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJ
ZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sg
Zm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVm
YXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYg
KCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFi
bGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVy
dGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBl
ZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5
KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgor
ICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBh
biBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9
IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQs
IHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBU
aGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVk
S2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRL
ZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExS
ZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3Jl
YXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RF
bXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3Ig
ZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtl
eSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUs
IHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAg
ICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAg
Ly8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFs
dWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVk
IGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAg
ICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAg
ICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0
dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGlj
dGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9u
YXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9u
PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVm
UHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpT
Qzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFj
ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6
OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50
ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6
Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlw
ZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBU
LCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgor
c3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
fQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwg
Ym9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRy
dWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsK
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3Vz
aW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8
TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQu
Li4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVM
aXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBl
TGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVt
YmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxz
byBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdU
eXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
KyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwg
bnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmln
YW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAg
ICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3Qs
IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlw
ZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2Fu
ZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBl
cyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRp
b25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAh
PSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rp
b25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9u
YXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5
cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERp
Y3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3Jk
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6
Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMg
IT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBl
TGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2Jq
ZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsK
KworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0
eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwg
dGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBo
YXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGws
IGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlw
ZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAg
ICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAg
ICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAg
ICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAg
ICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAg
ICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4g
SWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgor
ICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0
aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAg
ICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIp
CisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdh
bmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+
IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlw
ZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNl
PGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBs
ZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAg
ICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAg
ICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1
dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJu
VHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDEx
LiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVj
dFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAg
ICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAg
aWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcg
dXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92
ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlw
ZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJl
IHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVy
YXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0
aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhl
IHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZy
b3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlU
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRl
cmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1
ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVz
IGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVm
ZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBp
cyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6
dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZh
bHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJv
b2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1
ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVy
aWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5k
OjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1l
cmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVl
ICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmlj
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVt
ZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEg
Ym9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVh
bi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUo
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Cisg
ICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJ
bXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNl
cXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdU
Rjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkK
KyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5k
Ojpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2lu
ZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46
OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5W
YWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJu
VmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
VG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlw
ZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpK
U09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGlj
IFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJp
YWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0
ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47
CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAg
ICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2Us
IGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4g
bGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29s
dmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJU
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xh
c3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFw
cGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisg
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5
cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFp
bCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3Ry
dWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFt
ZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0
KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZl
cnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBW
YXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlw
ZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2lu
ZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7Cisg
ICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJ
RExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5h
cmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJl
dHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRp
Y0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRl
LnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZN
b3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SlNPTi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEpTT04uaAkocmV2aXNpb24gMjEx
NTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0SlNPTi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSwxNjg5ICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFs
T2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKICNpbmNsdWRl
IDxydW50aW1lL0pTT05PYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252
ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJp
bmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJh
dG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAg
IHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVj
dCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3Ig
SURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVy
dERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8v
IFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVy
c2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJh
dGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBi
b29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxP
YmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZl
cnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElL
RUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24o
c3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFu
eT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBK
U0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExB
bnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxl
PElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNl
PFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAg
ICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBh
biBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNz
aWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBm
dW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNO
dWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUg
bnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0g
ICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVy
biB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndp
c2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9y
IHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
ICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUg
SURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5l
ZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewot
ICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExC
b29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xl
YW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJh
eUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6
OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJy
YXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07
Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3Jh
cHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBw
ZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0
b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4g
b2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9y
UmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyBy
ZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJP
clJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBJbnRlZ2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExC
eXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRp
YyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMT2N0ZXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
aG9ydD4gewotICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9y
dD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWlu
dDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYo
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4g
dG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQz
MkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRv
SW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25n
PiB7Ci0gICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJ
bnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9u
Zz4gewotICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUu
YXNVSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAg
IHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5M
SUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0
ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9h
dD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGlj
IGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
bnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7
Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwot
ICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
ICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25G
aW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBN
ZWRpYVRpbWUuCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5
dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAg
c3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1
ZSkgfTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVz
Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0g
ICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQot
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU09iamVjdCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5
cGUgcmVzdWx0OwotICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVj
dCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNW
YWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVk
VmFsdWUpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBl
cwotICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9h
dGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1v
cmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydCB0aGF0Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3Vi
bGUgYXMgaXRzIGFyZ3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAg
IHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmlj
Q29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsK
LQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlND
Ojppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5
KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+
Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFi
bGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxl
bmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlm
ICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFz
azsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFw
ZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVy
Zmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQz
MlNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0lu
dDMyKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
RG91YmxlU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0g
SlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9i
amVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6
OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgp
LT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAg
ICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlS
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0
aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFs
dWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
LSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExG
bG9hdD4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7
Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogdmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9i
YWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXko
JmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0g
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAg
ICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25z
dHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAg
IHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERl
dGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3Qg
SWRlbnRpZmllckNvbnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZp
ZXIpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZp
ZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmll
cikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhz
dGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2lu
ZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZh
bHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVz
dWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8g
Mi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJv
dyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7
IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
LSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0o
KS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQs
IGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9y
IChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8u
W1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwot
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAg
ICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVt
ZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERv
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMg
aGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8K
LQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBk
ZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBl
ZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAg
ICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6
Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBi
ZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZh
bHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAg
IGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUp
OwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFk
eSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAg
ICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0
LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3Vs
dCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVz
dWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAg
Ly8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8g
MS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAg
ICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQg
dGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1
ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRv
IGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAg
IC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXks
IGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBl
c1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0g
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBU
OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlv
bmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0
aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9u
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhE
ZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sg
aW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50
ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIo
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9i
amVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3Jl
YXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQs
IGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFQsIGZhbHNlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFs
RnJvbnQ7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRp
b25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2Fu
ZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0g
ICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1
c2luZyB0eXBlID0gdm9pZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBi
b29sIGNvbmRpdGlvbj4KLXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6
OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+
OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExO
dW1iZXI8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
Zk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0g
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVt
ZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7Ci0gICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51
bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNp
bmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFz
ZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5n
IFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVu
Y2U8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250
PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVz
aW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
RnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5B
cnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBi
cmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBD
b25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+Owot
Ci0gICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsK
LSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJl
Y29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51
bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9m
UmVjb3JkVHlwZXMpID4gMDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwotCi0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8v
IDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBu
dWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFz
TnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhl
IHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHBy
ZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3Jk
VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlv
bmFyeSB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rp
b25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29y
ZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJl
Y29yZCB0eXBlLgotICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKLSAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBp
bXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgotICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2Jq
ZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhl
IG9iamVjdCBWLgotICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9i
amVjdCBhbmQgc3RlcCA0LjIpCi0gICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElz
SURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7Ci0gICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwotICAgICAgICAgICAgYnJpZ2FuZDo6Zm9y
X2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAg
ICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAg
ICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5
cGU6OlJhd1R5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKLQot
ICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsK
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEw
LgotCi0gICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKLSAg
ICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dp
bmcgY29kZSBieSBtYWtpbmcgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0
IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3Ip
LgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhv
ZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1
bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVu
Y2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFz
SXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZy
b3plbiBhcnJheSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEu
IExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4K
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVm
aW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlw
ZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5B
cnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlw
ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rp
b25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgot
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCi0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAg
MTIuNikKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46Ci0gICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jv
b2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVh
biwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAxMy4gSWYg
ViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVt
ZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0g
ICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhh
c051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgot
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJp
bmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTYuIElm
IHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRocm93IGEgVHlw
ZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0g
SURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBl
TGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5k
OjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZh
bHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0
aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50Lmlu
ZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVl
OwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7
Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5j
ZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAoSTo6dmFsdWUg
PT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+Pihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOwotICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERh
dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IElETEpTT04gdHlwZQotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNP
Tj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKICAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewpAQCAt
MTcyNSwxNzYgKzQ4LDQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4g
ewogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNy
ZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/
IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2
YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAg
aWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxF
KFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRv
SlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlm
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVy
dGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAg
ICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
ICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9
IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0
OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1
Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewot
ICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5
cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAg
ICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsK
LSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAg
IH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0
YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0Fy
Z3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAg
IHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5k
ZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAg
dHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydElu
ZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRO
dWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0TnVsbC5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydE51bGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2lu
Y2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZl
cnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0
b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAg
eworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0
JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2Vw
dGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJ
REwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxp
emVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZl
cnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
K30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJz
aW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0
aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJv
b2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVl
KQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAg
IHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVy
dGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0
aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwg
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpT
Qzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6
U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
LmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFu
eT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8
SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8
VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAg
IC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFu
IElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3Np
Z25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1
bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051
bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBu
dWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAg
ICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJu
IHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lz
ZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3Ig
dGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGds
b2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cisg
ICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRo
cm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJ
RExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVs
bGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Cisg
ICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJv
b2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVh
bigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5
QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6
SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJh
eUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4g
eworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAg
dXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsK
KworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBz
dHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNU
eXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0g
UmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFw
cGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBl
ckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRv
V3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBv
YmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3Rf
Y2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JS
ZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJl
dHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9y
UmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6
OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5
dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGlj
IHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNo
b3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50
MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJ
bnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWdu
ZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMy
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9J
bnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+
IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0lu
dDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25n
PiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5h
c1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAg
c3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAg
ICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMg
aW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBk
b3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pihu
dW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsK
KyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlm
IChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7Cisg
ICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
ICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1l
ZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0
ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAg
eworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJp
bmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJp
bmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVl
KSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMK
KworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0
LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRW
YWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVz
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0
aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9y
ZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJs
ZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAg
c3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWND
b252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6
OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkq
IGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5n
bG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJs
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0
YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVu
Z3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYg
KCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRl
eGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNr
OworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBl
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJm
bHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMy
U2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1
dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50
MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpE
b3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
U2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2Vx
dWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBK
U0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2Jq
ZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6
YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCkt
PmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
KworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAg
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRo
ZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKwor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1
ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0
ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZs
b2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERv
dWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAg
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgm
ZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAg
ICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBl
bGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBn
bG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0
cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAg
cmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJ
ZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5
dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmll
cik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVy
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0
YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5n
IEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFs
dWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1
bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAy
LiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93
IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0g
SlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owor
ICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgp
LgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5
TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMo
b2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwg
Zm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3Ig
KGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5b
W0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlw
dG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmpl
Y3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1l
cmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8g
d2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBo
YW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwor
CisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRl
c2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVk
S2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAg
ICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpj
b252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJl
ID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+
Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFs
dWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAg
YXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5
IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAg
ICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3Qu
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0
IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0
IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1
bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJl
c3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAv
LyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAg
IGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAx
LiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAg
ICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0
aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVl
LgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8g
YW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4o
c3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAg
Ly8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwg
ZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2
bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVz
VmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7
CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9u
YXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rp
b25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAg
eworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rp
b24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxs
YmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBp
bnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRl
cmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2Jq
ZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVh
dGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwg
Ym9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1
cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5
cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
VCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxG
cm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5k
Ojpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAg
ICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVz
aW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJv
b2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6
Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47
CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
dXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51
bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
TnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1l
cmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVt
ZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2lu
ZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNl
X29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZh
bHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJl
ck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250
PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcg
U2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5j
ZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1
ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNp
bmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExG
cm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlz
dD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09
IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFy
cmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZG
cm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5p
b24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENv
bmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisK
KyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwor
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVj
b3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElE
TFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVt
YmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25h
bEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZS
ZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8g
MS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51
bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6
OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNO
dWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUg
dW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJl
LWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5k
ZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRU
eXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAg
ICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9u
YXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlv
bmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3Jk
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVj
b3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAg
ICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGlt
cGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0
byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmpl
Y3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUg
b2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2Jq
ZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJ
RExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3Jf
ZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVt
b3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlw
ZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1l
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisg
ICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQo
dm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0
dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAu
CisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAg
ICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgp
KSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2lu
ZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3Qg
dGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvciku
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9k
KS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVu
ZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhv
ZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5j
ZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJ
dGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJv
emVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4g
TGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZp
bmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhv
ZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBl
ID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFz
SXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFy
cmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBl
LgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlv
bmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAg
NS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxs
YmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAx
Mi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9v
bGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFu
LCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBW
IGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1l
cmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAg
ICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1i
ZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFz
TnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisg
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmlu
Z1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBl
RXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJ
RExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVM
aXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6
OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFs
dWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRp
b25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5k
ZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7
CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsK
KyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNl
PGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9
PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAg
ICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAg
ICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0
ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09O
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2Ny
aXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUt
PmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0
aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxp
c3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAg
CisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQ
YXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Cisg
ICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7
CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJ
REJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wp
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVl
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8g
TUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwor
CituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAg
IHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNp
bmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNp
bmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJp
YWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAg
IHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0
ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBz
dHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAg
ICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZh
cmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRz
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90
IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFt
ZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0Owor
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwor
CisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAg
ICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1
cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdWxsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVs
bC5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnROdWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDM1NCArMjUsMTEgQEAKIAogI3By
YWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8
cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05P
YmplY3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07
Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVh
dE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7
Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2Vu
ZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlv
biBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJz
ZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRp
b25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
LXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRo
cm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24g
LT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlv
bk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVu
dW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5n
KiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3Rh
dGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxP
YmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBn
bG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZh
bHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUp
Ci17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4o
c3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VM
WSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0
YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQot
ewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpT
VmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25v
d24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRh
aWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBz
dHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25U
eXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwot
ICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVs
bGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46
OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhl
IGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1
ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVs
bGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtU
cmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBU
PwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3
aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0g
ICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNp
bmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBj
b25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0g
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0g
ICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhj
ZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9u
VHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVk
c1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlND
Ojpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
dmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxs
VmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpl
eHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlw
ZQotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE51bGw+IHsKICAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKICAgICB7CkBAIC0zOTAsMTUxMSArNDcsNCBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CiAgICAgfQogfTsKIAotLy8gTUFS
SzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRp
YyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
Qm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8v
IEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMg
c3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50
ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+
OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19Owot
Ci1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBw
KSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBl
cwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMg
aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7
Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewot
ICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Z0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9u
Z0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWlu
dDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0
aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBk
b3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0K
LQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRv
dWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERv
dWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAg
ICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAo
Y29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxs
QXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25m
aWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3Qg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWls
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVu
YW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAg
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZN
JiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAg
ICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJ
RExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFk
ZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8v
IHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUs
IG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJy
YXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0Fy
cmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAg
ICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAg
ICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmln
aHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5p
bmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFs
dWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4o
ZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERp
cmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7
Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
Q29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0g
ICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0g
ICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0
byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkg
JiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsK
LQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5s
aW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50
QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7
Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xv
YmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJv
emVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0g
ICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVu
dCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7
Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmlu
Zz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBp
ZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0
cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4g
c3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExS
ZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3Jk
PEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1l
IEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBW
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBp
bnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5k
ZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAg
IC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQu
IExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7
Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5
cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtl
eSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykg
ewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShr
ZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAg
ICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3Jp
cHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYg
ZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1
bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICgh
ZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxl
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRl
ZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRL
ZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAg
ICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4g
SURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBD
b252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBz
ZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhp
cyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtl
eSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5
LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
Ni4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0
ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVh
Y2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0
aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAg
ICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8v
IDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVl
LgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBi
ZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAg
ICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAg
ICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVy
biByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFy
eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248
VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxU
PihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0
cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6
OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwg
dHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJv
b2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVl
PgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0g
ICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2lu
ZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExp
c3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlz
dCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmln
YW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVz
aW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJl
ck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28g
Y2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmln
YW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51
bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAg
dXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6
Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9u
YXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0
aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9
IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxp
c3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVj
dFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0K
LSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlw
ZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
TnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBi
cmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVz
IGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAg
ICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAg
ICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAg
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAg
ICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElm
IFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAg
ICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAg
Ly8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQot
ICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBy
ZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVM
aXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAg
ICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAg
ICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRv
IGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5
cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4g
SWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RU
eXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlm
IChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVz
ZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUs
IHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0
aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
c2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0
b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhl
bjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSBy
ZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96
ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJh
dG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBl
IGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBp
bmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMg
YSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBi
b29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6
OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZh
bHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29s
ZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUs
IHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmlj
IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Ly8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAh
PSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVy
aWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJv
b2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4u
Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAg
IHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1
ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6
OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0g
ICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6
Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcg
SSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
V1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRv
RGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNP
TlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBS
ZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUs
ICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+Owot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAg
ICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBj
dXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZl
ciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhO
U1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlw
ZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNz
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBl
ZCh2bSwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4g
b2JqZWN0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
dXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwg
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUg
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVu
YW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcg
Q29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAg
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURM
VHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJn
dW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1
cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWND
b252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBy
ZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92
ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdWxsYWJsZS5oCShyZXZpc2lv
biAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5o
OjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bGxh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5k
aW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8
cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05P
YmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNW
YWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3Jt
YWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRo
cm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkg
Y29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9i
amVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZp
Z3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZl
cnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxV
PiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5
IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUg
PSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJs
b2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9h
ZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZl
cnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFz
RXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYg
dmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAg
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRv
SlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7Cisg
ICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxh
YmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsK
KyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
c3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJu
VHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6
TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBl
KFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMg
YmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0
cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8v
IHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1
cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLwor
ICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3
aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxh
YmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwg
dHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwor
ICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7
CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6
Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRy
X3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAg
c3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0
LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJy
YXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7
CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsK
KworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBl
ZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFy
cmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4g
eworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8
QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6Okdl
bmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZh
bHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0
aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0K
K307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHAp
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsg
fQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8
VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2Vy
IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0
YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0lu
dDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNo
b3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExv
bmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VS
YW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
PiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGlj
IGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRp
YyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKwor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
RmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZs
b2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Cisg
ICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAg
ICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChV
TkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlu
bGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0
ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0
YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVt
YmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6
OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4g
eworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJl
cjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7
CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAg
IGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVh
dE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmlu
Zz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNo
ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYg
KGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVs
bEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0
cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7Cisg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3Ry
aW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENh
Y2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9i
amVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ry
b25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBE
ZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8
dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCog
anNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAg
ICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpT
Qzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7
CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMg
YW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBl
cywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0Cisg
ICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3Vt
ZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAg
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2Vx
dWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBK
U0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2Jq
ZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6
YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCkt
PmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsK
KworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAg
ICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRo
ZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJy
YXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5k
ZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjpp
c25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0
KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5k
ZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+
IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExv
bmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5U
eXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxV
LCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQor
ICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1l
bnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIs
ICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3Rv
cikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBl
bGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhl
YywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9i
amVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZl
cnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Cisg
ICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmll
cik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFt
ZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExS
ZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlw
ZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVu
YW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVt
cHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBp
cyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAg
ICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4K
KyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3Qo
dmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAg
Ly8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlND
OjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJp
bmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRl
LCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1l
bnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0
eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9y
OworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXRE
ZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAy
LiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1
ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hl
Y2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUg
ZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAg
aWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1l
cmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29u
dmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0
eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwg
a2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkp
LgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtl
eSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0
byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1
ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1
bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3Rl
OiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5
cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlw
ZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0
Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1
Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBm
b3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJl
IGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5v
dGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQor
ICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAg
ICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQg
dmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVh
dGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAg
ICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAg
ICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4g
UmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0
aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJh
dGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0
aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMg
UmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAg
ICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxU
Pj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29u
c3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
CisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNr
SW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4K
K3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBU
Pgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7Cisg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3Qs
IHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47
CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9p
ZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4K
K3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJv
bnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9u
PFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5
cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6
XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Cisg
ICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwg
bnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcs
IGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJp
bmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlz
dCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
KyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxp
c3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJp
Z2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25k
aXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERp
Y3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250
PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVj
b3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdh
bmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlw
ZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRU
eXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
T2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4g
MDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlv
biB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5l
ZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9v
bCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51
bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQg
dHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisg
ICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgor
ICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgor
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAg
ICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAg
ICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
NC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElm
IHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVu
IHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBW
LgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVy
biB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAg
ICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0
LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJy
aWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5
cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNl
VHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5W
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJl
bmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJ
bXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Cisg
ICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7Cisg
ICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAg
IGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0
dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8v
IDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09i
amVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAg
ICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAg
ICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtp
bmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBw
cm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2Ug
dHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9k
IGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5j
ZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJ
dGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBl
LCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUg
dGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
IGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJy
YXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFz
SXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAg
ICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNl
IHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5
cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEg
cmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYg
ViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJp
Z2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+
Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYg
KHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElE
TEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2
YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJp
YyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51
bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmln
YW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNO
dW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZh
bHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1l
cmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
bnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVz
IGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9v
bGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5
cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47
CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2lu
ZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5n
IFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4s
IFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFu
dCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmln
YW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1
c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBl
KT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0
dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRl
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04g
dHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3Rh
dGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShz
dGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8
VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisK
KyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFs
c2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1
cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jl
c29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBw
ZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVy
Q2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9X
cmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkp
CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERl
dGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBl
bmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxs
b3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0
ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZh
Y2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIg
OiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0g
dHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1
c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7
CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0
aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0
ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAg
IHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6
ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBX
VEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVsbGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdWxsYWJsZS5oCShy
ZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnROdWxsYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyNDYgKzI1LDM0IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2Jq
ZWN0Lmg+CisjaW5jbHVkZSAiSlNET01Db252ZXJ0QW55LmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0TnVtYmVycy5oIgorI2luY2x1
ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
b252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3Mg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9w
ZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQot
ICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09i
amVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBF
eGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBm
b3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29u
dmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVj
aWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24u
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBj
b252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0
aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0K
LS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29u
dmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVt
ZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVj
dCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKK25hbWVzcGFjZSBEZXRhaWwgewog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KK3N0cnVjdCBOdWxs
YWJsZUNvbnZlcnNpb25UeXBlOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KK3RlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IAorc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25U
eXBlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNF
eGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAg
IH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFu
eSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwot
ICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAg
fQorc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5U
eXBlOwogfTsKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgTnVsbGFibGVD
b252ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVy
dGVyPElETEFueT46OlJldHVyblR5cGU7CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxs
YWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7
Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVy
blR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZl
cnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4gewpAQCAtMzcwLDE1MzEgKzE1OCw1IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjwKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExO
dWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVh
bj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAg
IHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dy
YXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZl
clZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
Qzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3Jh
cHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1
c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlW
aWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFjZSB0eXBl
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVk
UmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhy
b3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVyblR5
cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFtZXNwYWNl
IERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYo
Y29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3Rf
Y2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JS
ZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4g
cC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRl
PiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAg
ICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0
ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9y
dD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHN0YXRp
YyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVt
YmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMg
dWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4g
dG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUu
dG9VSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5z
aWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0lu
dDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkK
LSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4g
dG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50
NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0
eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJl
cikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkK
LSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUgbnVtYmVy
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7Ci0g
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBm
bG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigm
c3RhdGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3Ry
aWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91Ymxl
IG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3Vi
bGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3RhdGljIGlu
bGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRv
dWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAg
IHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3Vi
bGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci0K
LSAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01T
dHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRp
b24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJp
bmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAm
JiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
ICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
JiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0g
ICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVy
biB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNo
SW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0
ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNp
YWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBp
bXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8g
YWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3Zlcmxv
YWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBF
eGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
ciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFs
dWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwot
Ci0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7
Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9y
UHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5
cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlv
biB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBl
KCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdU
eXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtp
XS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4
VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91
YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUs
IGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgm
c3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1
c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+
OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6
UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAg
ICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAg
SlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAg
aWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFu
ZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0g
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRl
eGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNv
bnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1
ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdl
dERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJs
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0
OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0
LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBy
ZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwg
bGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBh
Y2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
bGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAg
bGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAg
ICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xv
YmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JG
cmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBS
ZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0gICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICAg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRp
Zmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRv
Qnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAg
ICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQot
ICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2Yg
cmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBO
dWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBU
eXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0g
ICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQga2V5cyBi
ZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBv
YmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51
bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBp
biBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAg
ICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KLSAgICAg
ICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBi
b29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigm
c3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90
IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJs
ZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAg
ICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
dmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURM
IHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWls
OjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0gICAgICAg
ICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAgICAgICAg
ICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAg
Ly8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBv
ZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+
Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAv
LyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1
ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBl
biB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhh
bmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNS4g
T3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFs
dWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1
ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJldHVybiBy
ZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFBy
b3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZz
dGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcg
KGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWly
IDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0
byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlz
IG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAgICAvLyBh
biBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBMZXQgZXNW
YWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAg
ICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQ
YWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVE
YXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNy
ZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAvLyA0LiBB
c3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRl
ZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0Lgot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25h
cnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0
aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVt
ZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAg
c3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0
aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
Q2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxs
YmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIg
PSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2
YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6
YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5h
bWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlv
bmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBU
Pgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVy
blR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1l
c3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlv
bj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0g
ICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0
LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9u
YWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRp
b24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1
c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFt
ZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxO
dW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmlj
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNU
eXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJ
RExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsK
LSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0
cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmlu
Z1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2Vx
dWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5j
ZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVl
bmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1
ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdh
bmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJv
emVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAg
dXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0
Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRp
Y3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAg
ICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVM
aXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNv
cmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVz
aW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNv
cmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51
bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9m
RGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcg
SW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJm
YWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMg
YSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0
aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0g
YnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+
Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxh
dHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTog
VW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAg
ICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNE
aWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYg
KGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIu
IElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYg
KGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJl
Y29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxh
dGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
dGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAg
KEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYg
KGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFs
dWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7
Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1
dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlw
ZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1
c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1
c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxS
YXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1
ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVu
dGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5W
YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55
IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0Nl
bGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNP
YmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAg
ICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2
YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBv
ZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9m
IHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMg
IT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0
ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNl
cXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdl
dE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAy
LiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVh
dGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9m
IHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJ
dGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBG
cm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGlu
ZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
RGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNv
cmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3Jk
VHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFj
ayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAx
Mi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2Jq
ZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhl
IG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2
YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVh
biwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxp
c3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAg
ICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9v
bGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJp
Y1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0
eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmlu
Z1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAg
ICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJp
bmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0g
ICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBp
ZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29s
ZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQot
ICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxU
Li4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBl
TGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9u
VHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmln
YW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3Np
emU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAg
ICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFs
PEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNl
cXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFt
ZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsK
LSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFT
U0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxi
cmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6
OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+
IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJs
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4g
ewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnko
JnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09O
UGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
U2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3Rl
bmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxp
c3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxk
KCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
ICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBh
dGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdl
YkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3Ig
dmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJ
bnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJ
dGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVy
dGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9
IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNp
emVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+
IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1
bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90
IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQo
KTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3Rk
OjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElE
TFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5k
ZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwg
c3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgq
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9
OwotfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuY3BwCShyZXZpc2lvbiAyMTE1NDgp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6MjExNTQ4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAx
OTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICog
IENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Rh
dGVJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0
Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNT
dHJpbmcmIHByb3BlcnR5TmFtZSkKK3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5
KHByb3BlcnR5TmFtZSk7Cit9CisKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOwor
fQorCitKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworc3Rh
dGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmlu
Zy5jb250YWluc09ubHlMYXRpbjEoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5n
OworfQorCitTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5n
IHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0
cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRv
Qnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5
dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaGFzVW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAg
Ly8gRmFzdCBwYXRoIGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJv
Z2F0ZXMuCisgICAgaWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAg
IGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3Ry
aW5nVG9VU1ZTdHJpbmcoU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3Ig
dGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYg
KCFoYXNVbnBhaXJlZFN1cnJvZ2F0ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOwor
CisgICAgLy8gU2xvdyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1v
YnRhaW4tdW5pY29kZQorICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0
aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3
IHZpZXcgeyBzdHJpbmcgfTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9p
bnRzKCkpIHsKKyAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhl
Y1N0YXRlJiwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3Ry
aW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmco
V1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJp
bmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJp
bmcpKTsKK30KKworSlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJs
ZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAg
IGlmICghdmFsdWUuaW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQor
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhl
YykpLT5pbnRlcm5hbE51bWJlcigpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5TWV0aG9k
ID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBw
cm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOworCisgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwor
fQorCitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGlj
IGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3Qg
dWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZmZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qg
a0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJn
ZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRp
YyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJs
ZSBtYXgpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3Ry
aW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJU
b1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKK30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUg
bWF4aW11bSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6
aXNpbmYoeCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VF
cnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICB4ID0gdHJ1bmMoeCk7CisgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVt
KSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJp
bmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
cmV0dXJuIHg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1p
dHMgeworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4gewor
ICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25z
dCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJl
ck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlw
ZUxpbWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAy
NTU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAy
XjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7Cisg
ICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVlID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25z
dCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1i
ZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IElu
dFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQg
bWF4VmFsdWUgPSA2NTUzNTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1
ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMg
aW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjpp
c19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50
ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFp
dDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2ln
bmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkp
IHsKKyAgICAgICAgaW50MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOworICAgICAgICBpZiAoZCA+
PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExp
bWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBkICU9IExpbWl0c1RyYWl0
OjpudW1iZXJPZlZhbHVlczsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7
CisgICAgfQorCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRz
VHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNu
YW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4
KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4
IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgs
IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZW
YWx1ZXMgOiB4KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQg
dG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRl
Z3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3Jh
bCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0Owor
ICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25l
ZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkg
eworICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQg
PD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGQpOworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBMaW1pdHNU
cmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisK
KyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5m
b3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjpp
c25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwor
fQorCitpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisK
K3VpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisK
K2ludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENs
YW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLWJ5dGUKK2ludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQor
CitpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50
MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZf
dCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUlu
dDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAor
aW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
V2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAordWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7
Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0
b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKK30KKworaW50MzJfdCB0b0ludDMy
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8g
MCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Cit9CisKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xh
bXBUbzx1aW50MzJfdD4oeCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtdW5zaWduZWQtbG9uZwordWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMy
KTsKK30KKworaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50
ZWdlcik7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAw
KTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsK
K30KKworaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBy
ZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxk
b3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2Vy
KSk7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
KyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3Rk
OjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9
CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90
IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5m
aW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4g
bjsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25n
LWxvbmcKK3VpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFw
IE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8g
Ml42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwg
bik7CisgICAgcmV0dXJuIG47Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5jcHAJKHJldmlzaW9uIDIxMTU0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCwxNTIgKzIwLDE2IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydE51
bWJlcnMuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNvbW1vblZN
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0j
aW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2Uu
aD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVy
dHkocHJvcGVydHlOYW1lKTsKLX0KLQotSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7
Ci19Ci0KLUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOwotfQotCi1z
dGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGlmICghc3Ry
aW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiBzdHJp
bmc7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJp
bmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9CeXRl
U3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVl
VG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1Rv
Qnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKLXsKLSAg
ICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vy
cm9nYXRlcy4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKLSAgICAg
ICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBz
dHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZv
ciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KLSAgICBp
ZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBzdHJpbmc7
Ci0KLSAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZu
LW9idGFpbi11bmljb2RlCi0gICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRo
IHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZ1Zp
ZXcgdmlldyB7IHN0cmluZyB9OwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQ
b2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7Ci0gICAgfQotICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhF
eGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFN0cmluZyBz
dHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmlu
ZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0
cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0
cmluZykpOwotfQotCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0KLQotZG91
YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7Ci0g
ICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkp
Ci0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChl
eGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRh
IGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRo
b2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9y
IHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7
Ci19Ci0KIHN0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7CiBzdGF0
aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKIHN0YXRpYyBjb25z
dCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7SW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmgJKHJldmlzaW9uIDIxMTU0
OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6MjExNTQ4
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0TnVtYmVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxp
dGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4g
SW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisK
K2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZv
cmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6
OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRp
b25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNp
b24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUg
Zm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rk
OjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIq
IGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlz
T2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9u
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpm
b3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZy
b20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0
ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRl
JiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252
ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRl
cjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
ZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQor
eworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJv
cGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBl
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRp
b25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExB
bnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxl
Q29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBu
b3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBl
cmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3
aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlz
IGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJ
REwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBO
T1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYg
ViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBl
IFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4K
KworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpT
Q29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0
VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4
dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVs
bD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRy
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBi
b29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9v
bGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBs
YXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVy
PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFy
cmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5U
eXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3Vw
cG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJm
YWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpU
b1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAg
UmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCitu
YW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQ
dHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVy
biBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7
IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcwor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVy
PElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50
MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Cisg
ICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9J
bnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAg
IHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0
dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0lu
dDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5n
IHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3Vi
bGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKwor
ICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJs
ZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51
bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxv
YXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAg
c3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJs
ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmlu
aXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91
YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBz
dGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAg
fQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5
dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1
cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5
U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmln
dXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0
eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlw
ZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6
OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1l
IElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0
KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAg
IGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2
bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAg
ICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
Ly8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBp
cyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExM
b25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBh
biBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRh
a2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXko
b2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAg
UmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQg
ZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRl
eGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJ
bnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUg
fHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDAp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91
YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVj
dEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVk
VmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Cisg
ICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29u
dmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwor
ICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAg
ICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAg
ICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9j
b2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVz
dWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0
aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBK
U0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBK
U0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09
IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhW
YWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGlu
ZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgp
OworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4K
KyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3Vi
bGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1
ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5l
Q2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAg
ICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Cisg
ICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFs
T2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVu
QXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1
ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
ZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlu
bGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAg
ICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkp
OworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxw
dHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25z
dHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisK
KyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4g
eworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmlu
Zz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAg
ICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3Ry
dWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNv
cmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEss
IFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6
OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0
YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZp
bmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8v
IDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsK
KyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExl
dCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVy
dHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Cisg
ICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywg
SlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBv
ZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewor
ICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkp
LgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAg
ICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNj
cmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRv
cikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVz
YyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBl
bnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQK
KyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVz
Y3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0
byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkg
PSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisK
KyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAg
ICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURM
IHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252
ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQg
aXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBj
YW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwg
dHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0
eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4g
UmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSgl
T2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlP
YmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2gg
bWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlW
YWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29u
dmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlz
IHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAg
ICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIu
IExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgor
ICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBr
ZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAh
IENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAg
IGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAg
IC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiBy
ZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25h
cnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
RW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+
IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0
RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxU
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFz
T2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1
ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVh
dGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFj
ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0
ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3Qg
Q29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1
ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVj
dCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wg
Y29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgor
ICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZy
b250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBD
b25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3Qs
IGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
eworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9
IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3Qg
PSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5k
OjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9m
TnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hl
Y2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5k
OjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMg
PSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAi
VGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAg
dXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJl
ck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNp
bmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGlj
X2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4g
YW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47
CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5
VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5
cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAh
PSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9u
YXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmln
YW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7
CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3Qs
IGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5
cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsg
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAg
ICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBp
bmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVs
bFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmln
YW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJl
IHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAv
LyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAg
CisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAg
aWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAg
ICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAv
LyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAg
ICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYg
aXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBp
bmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4g
dGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAg
ICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8g
ICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAg
ICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpf
MT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1
cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0
PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNs
dHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50
YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAg
ICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNh
c3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUo
SW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYg
ViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBK
U0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChj
ZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQor
ICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRo
YXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRo
ZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUg
cmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2Vx
dWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JN
ZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1
bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4g
YXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9y
TWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYg
dHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFu
ZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNs
dWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBC
b29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29s
ZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFu
eTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVl
OworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFu
LCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRo
ZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5
cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6
ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5
cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
MTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wg
aGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAw
OworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMg
dHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xl
YW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisg
ICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVz
aW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5j
ZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZh
cmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAg
eworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6
b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9y
X2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9
IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBl
Ojp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RG
OjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisK
KyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVl
LnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0
ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0
cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQ
dHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZn
bG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2
ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAg
IGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJy
ZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3Rl
bmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0
eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFS
SzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExX
ZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwg
dmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBw
b3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVy
dGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBW
YXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURM
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisK
KyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9w
dGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFk
aWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1l
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29u
dGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAg
ICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENv
bnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlw
ZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1l
bnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4g
eyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252
ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
c3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRh
aWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShy
ZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnROdW1iZXJzLmgJKHJldmlzaW9uIDIx
MTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE51bWJlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDUzICsyNSw1MCBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKICNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
b252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjsKLQogZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3Mg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgfTsKLQotc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9w
ZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQot
ICAgIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09i
amVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBF
eGNlcHRpb25UaHJvd2VyJiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBm
b3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29u
dmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVj
aWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24u
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBj
b252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci19CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCiB7CiAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0
aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Ci19Ci0KLS8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0K
LS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29u
dmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVt
ZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVj
dCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUu
cmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVO
TElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3Rh
dGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUg
PSBKU0M6OkpTVmFsdWU7Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExBbnk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IE51bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlw
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxh
YmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJm
YWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50
ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0
cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAK
LSAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0
byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcg
YXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFj
ayBmdW5jdGlvbgotICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0
QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFs
dWUgbnVsbC4KLSAgICAvLwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8v
Ci0gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJl
dHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhl
cndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMg
Zm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBnbG9iYWxPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmln
dXJhdGlvbik7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24p
OwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3
YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5h
bWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzR2xvYmFsT2JqZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZy
b21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4g
ewotICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoc3RkOjpudWxscHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jv
b2xlYW4oJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCb29sZWFuPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBB
cnJheUJ1ZmZlciBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBK
U0M6OkpTQXJyYXlCdWZmZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6
QXJyYXlCdWZmZXIqOwotfTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZp
ZXc+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Owot
ICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsK
LX07Ci0KLS8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGFwdG9yPj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5l
cmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEludGVyZmFjZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcg
V3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46Oldy
YXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBl
Ojp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQot
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1
cm4gb2JqZWN0OwotICAgIH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8VCo+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0
ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkg
eyByZXR1cm4gcC5nZXQoKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQ
dHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0
YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b25zIGNvbnZlcnQgdmFsdWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmlj
YXRpb24uCisvLyBUaGUgY29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNv
bnZlcnRlZCB0byBhIG51bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8v
IHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdl
ciB0eXBlLgorCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50
OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VY
UE9SVCBpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0lu
dDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIHVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0
b1VJbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dF
QkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0
b1VJbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDMyX3QgdG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50
NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JU
IGludDhfdCB0b0ludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgdWludDhfdCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07CiAKIC8vIE1BUks6IC0KIC8v
IE1BUks6IEludGVnZXIgdHlwZXMKQEAgLTgyMywxMDc4ICs0MjAsNCBAQCB0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyCiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8g
TUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01T
dHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRp
b24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJp
bmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAm
JiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAg
ICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24g
PT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
JiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0g
ICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVy
biB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKLSAgICAg
ICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBmb3JFYWNo
SW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0
ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFNwZWNp
YWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBp
bXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8g
YWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3Zlcmxv
YWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtlcyBhbiBF
eGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
ciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFs
dWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwot
Ci0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7
Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9y
UHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5
cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlv
biB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBl
KCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdU
eXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8g
aW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtp
XS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4
VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAg
ICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91
YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVl
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUs
IGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgm
c3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1
c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+
OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6
UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAg
ICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
R2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAg
SlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAg
aWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFu
ZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0g
ICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRl
eGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRl
eGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNv
bnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1
ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdl
dERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAg
ICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3Ry
dWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJs
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0
OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0
LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBy
ZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwg
bGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBh
Y2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
bGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAgICAgICAg
bGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKLSAgICAg
ICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xv
YmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JG
cmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBS
ZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0gICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICAg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRp
Zmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRv
Qnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAg
ICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQot
ICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1w
bGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2Yg
cmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBO
dWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBU
eXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0g
ICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQga2V5cyBi
ZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFy
cmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAgICAgICBv
YmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51
bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBp
biBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAgICAgICAg
ICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KLSAgICAg
ICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAgICAgICBi
b29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigm
c3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90
IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJs
ZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0gICAgICAg
ICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3Iu
dmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURM
IHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWls
OjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwotCi0gICAgICAg
ICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAgICAgICAg
ICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAg
Ly8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBv
ZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+
Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAv
LyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1
ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBl
biB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhh
bmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNS4g
T3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFs
dWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1
ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDYuIFJldHVybiBy
ZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFBy
b3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZz
dGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcg
KGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWly
IDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0
byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlz
IG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCi0gICAgICAgICAgICAvLyBh
biBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAgICAgICAgICAvLyAyLiBMZXQgZXNW
YWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAg
ICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQ
YWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVE
YXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCi0gICAgICAgICAgICBib29sIGNy
ZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwotCi0gICAgICAgICAgICAvLyA0LiBB
c3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRl
ZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0Lgot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25h
cnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0
aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVt
ZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAg
c3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0
aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
Q2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxs
YmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIg
PSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9u
VGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2
YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3Rh
dGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6
YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5h
bWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlv
bmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBU
Pgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVy
blR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpv
cHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1l
c3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlv
bj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0g
ICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0
LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9u
YWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRp
b24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1
c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFt
ZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxO
dW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmlj
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNU
eXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJ
RExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsK
LSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0
cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmlu
Z1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2Vx
dWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5j
ZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUg
MCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVl
bmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1
ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdh
bmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJv
emVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAg
dXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0
Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRp
Y3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAg
ICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVM
aXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNv
cmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVz
aW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNv
cmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51
bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9m
RGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcg
SW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJm
YWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMg
YSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0
aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0g
YnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+
Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxh
dHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTog
VW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAg
ICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNE
aWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYg
KGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIu
IElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYg
KGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJl
Y29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxh
dGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
dGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAg
KEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYg
KGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFs
dWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7
Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1
dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlw
ZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1
c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1
c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxS
YXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1
ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVu
dGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5W
YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55
IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0Nl
bGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNP
YmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAg
ICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2
YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBv
ZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9m
IHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMg
IT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0
ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNl
cXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdl
dE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAy
LiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVh
dGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9m
IHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJ
dGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBG
cm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGlu
ZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
RGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNv
cmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3Jk
VHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFj
ayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAx
Mi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2Jq
ZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhl
IG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2
YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVh
biwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxp
c3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAg
ICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9v
bGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJp
Y1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0
eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmlu
Z1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAg
ICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJp
bmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0g
ICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBp
ZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29s
ZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQot
ICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxU
Li4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBl
TGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9u
VHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmln
YW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3Np
emU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAg
ICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFs
PEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNl
cXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFt
ZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsK
LSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFT
U0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxi
cmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6
OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAg
IEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+
IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJs
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4g
ewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnko
JnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09O
UGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
U2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
RXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3Rl
bmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxp
c3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxk
KCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxU
Pj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5n
IFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAg
ICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBh
dGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdl
YkdMQW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3Ig
dmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJ
bnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8VD47Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJ
dGVtPigqcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVy
dGVyQmFzZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9
IFZlY3RvcjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNp
emVfdCBhcmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+
IGFyZ3VtZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1
bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90
IHN0YXJ0SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQo
KTsKLSAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3Rk
OjpudWxsb3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElE
TFR5cGU+OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5k
ZXg7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJn
dW1lbnQoaSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwg
c3RkOjpudWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgq
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9
OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE9iamVjdC5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE9iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgor
I2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxP
YmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50
YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0gY2xh
c3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2Us
IENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9y
bWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBl
bnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25h
bDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVk
RW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQoreworICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1wbGVt
ZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0
ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBm
b3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7CisK
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46
Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVl
ZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVl
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQs
IHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZh
bHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewor
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJu
IHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
VSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3Jl
YXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENv
bnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25z
dCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25hbWVz
cGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0
IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+
IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1
cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lv
blR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0
LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAor
ICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBl
IGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90YXRl
ZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFi
bGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBIYW5k
bGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVl
IG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIEltcGxl
bWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVy
PFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxW
YWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
VDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZh
dWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFu
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1
ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7CisgICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRvV3Jh
cHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVmZmVy
VmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlND
OjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVm
UHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBXcmFw
cGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRS
ZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJv
d2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlw
ZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgIGlm
IChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3BhY2Ug
RGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihj
b25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9j
YXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJl
Zihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBw
LmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlD
cmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+
IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICBy
ZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRl
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3RhdGlj
IGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1i
ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgor
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRpYyB1
aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50
b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNp
Z25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50
NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
TG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ2
NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
VW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5
cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQor
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRp
YyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNm
aW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJp
Y3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUg
bnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJl
cikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIp
KSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMgaW5s
aW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAg
c3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJs
ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KKwor
ICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
ICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAg
ICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmlu
Zz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAm
JiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAg
ICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6
OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAgICAg
ICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVhY2hJ
bkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRl
LCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3BlY2lh
bGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGlt
cGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBh
ZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9h
ZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFuIEV4
ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
IHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisK
KyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsK
KyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQ
cm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlw
ZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVu
Z3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9u
IHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUo
KSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5
cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBh
dXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ld
LmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhW
YWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3Vi
bGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNv
bnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwg
ZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZz
dGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVz
aW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47
CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAg
ICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBK
U0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBp
ZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5k
Tm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAg
ICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4
aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29u
dGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVl
ID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0
RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAg
ICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8
PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46
OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5
cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4g
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+
JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7
CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIHJl
dHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBs
aXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFj
aXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBs
aXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBs
aXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAg
ICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9i
YWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZy
ZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFJl
Y29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0ZW1w
bGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50
aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlm
aWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0
IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9C
eXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAg
ICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZl
cnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiBy
ZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51
bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFR5
cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlzIGJl
ID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1lQXJy
YXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAgIG9i
amVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpFbnVt
ZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlzIGlu
IExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICAg
ICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAgICAg
ICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIGJv
b2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKCZz
dGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3Qg
dW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJhYmxl
IC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAgICAg
ICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRvci52
YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwg
dmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6
OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAgICAg
ICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAgICAg
ICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAv
LyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9m
IHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46
OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVl
IHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFwcGVu
IHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFu
ZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1LiBP
dGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRWYWx1
ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVl
IH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJuIHJl
c3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0UHJv
dG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJnN0
YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGluZyAo
a2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIg
OiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVkIHRv
IGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMg
bm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8vIGFu
IElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBlc1Zh
bHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAg
ICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBh
aXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURh
dGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wgY3Jl
YXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQuIEFz
c2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVhdGVk
LCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
RGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFy
eTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
ZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVyYXRp
b24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVudW1l
cmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBz
dGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRp
b25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBD
YWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRpb25U
aHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZh
bHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjph
c09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0aW9u
YWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+
CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4geworICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0dXJu
VHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25hbWVz
cGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9u
PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsKKyAg
ICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3Qs
IGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRpb25h
bEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlv
bj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVz
aW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1l
IFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51
bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmlj
VHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVyaWNU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5
cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElE
TEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+Owor
ICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5k
OjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2Fu
IGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU3Ry
aW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5n
VHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1
ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNl
VHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2VxdWVu
Y2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5p
b24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96
ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAgICB1
c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
RGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+
Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAg
fHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGlj
dGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOworICAg
IHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxp
c3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXpl
PFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29y
ZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAgdXNp
bmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29y
ZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVt
YmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZE
aWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2luZyBJ
bnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZh
Y2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6
OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBh
IG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBi
cmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+
Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0
dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RFOiBV
bmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAgICAg
IC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVz
IGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAgMi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBpZiAo
aGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVj
b3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0
Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBh
biBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAg
IDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0
aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAgICAo
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBpZiAo
YnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1
ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsK
KyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0
byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBl
KT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAgIHVz
aW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAgIHVz
aW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJh
d1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVl
ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlm
ICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50
YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
aWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZh
bHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkg
a2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7CisgICAg
ICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpTQ2Vs
bCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09i
amVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAgICAg
ICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZh
bHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46CisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9m
IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
cmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2Yg
dGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAh
PSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRl
cmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2Vx
dWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0
TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIu
IFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
My4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0
aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2Yg
dGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25zdGV4
cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0
ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZy
b3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNE
aWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5j
bHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29y
ZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRU
eXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNr
IGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEy
LjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmpl
Y3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUg
b2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZh
bHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAg
ICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4o
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29s
ZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46CisgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElmIHR5
cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5n
VHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAg
ICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmlu
Z1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisK
KyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAg
ICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
TnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4g
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGlm
IChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xl
YW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisg
ICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQu
Li4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVM
aXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdh
bmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6
ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAgICAg
ICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9uYWw8
SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2Vx
dWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1l
IFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwor
ICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJy
aWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6
dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAg
QVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4g
eworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
YXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91Ymxl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7
CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgm
c3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05Q
YXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZh
bHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmpl
Y3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBF
dmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVu
ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8gbGlz
dGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQo
JnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1l
IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
ICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnRO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMV2Vi
R0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwor
ICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZvciB2
YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRpY0Nv
bnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETElu
dGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0
ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGlj
Q29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVyID0g
VmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAgc2l6
ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4g
YXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3Vs
dCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qg
c3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgp
OworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBzdGQ6
Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURM
VHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRl
eDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlh
ZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBpLCBz
dGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2
YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydE9iamVjdC5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTg3NiArMjUsMjUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJC
dWZmZXJTb3VyY2UuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiSURMVHlwZXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBm
cm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0K
LXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhy
b3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0
aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9u
YXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkg
Z2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1l
cmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+
KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6
OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0v
LyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0
aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pT
KEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVk
c1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0
ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUs
IHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJl
dHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1Zh
bHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8
SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBl
Pjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewot
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46
OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFi
bGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBE
ZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4g
SWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZh
bHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRv
IGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24K
LSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRo
ZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0g
ICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIu
IE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElE
TCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5u
ZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2Jq
ZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwot
ICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRp
b25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJs
ZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxh
YmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2Jh
bE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1
ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2
YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUo
dmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051
bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0
aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6
bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4g
ewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVh
bj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIg
c3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxK
U0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5
QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVy
KjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBU
b1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBU
eXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8
SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQot
Ly8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBl
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAg
IGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsK
LSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQq
PihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25z
dCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAu
Z2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29u
c3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRy
T3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
SW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051
bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4
RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9j
dGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsK
LSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNo
b3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5z
aWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJF
bmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZz
dGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9u
Zz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAg
IHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsK
LQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWdu
ZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAg
ICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMy
KCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMg
aW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJv
d05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUg
ZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBu
dW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0
YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1l
LgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0
cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmco
JnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExE
T01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5n
PiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJp
bmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmlu
Zz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAg
ICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmlu
Z1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBK
U0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1l
c3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVj
dCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
VmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNP
YmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVz
dWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNW
YWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2lu
dFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVy
aWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQg
dGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0
cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3Qg
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRl
ciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0Fy
cmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9i
amVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9i
amVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsK
LQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAg
ICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5j
b250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkg
ewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNo
YXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0
dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0g
YXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNP
YmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5
KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJh
eUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAg
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAg
IFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0
IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5k
ZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAo
aW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ld
LmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNo
ZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9
IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRl
cjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6
UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZl
Y3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBu
dWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJy
YXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4g
SlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZp
ZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVy
PElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmlu
Zz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVy
dGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlk
ZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywg
dHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlw
ZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUg
PSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBh
IG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5
cGUoTykgaXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBl
RXJyb3IuCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFz
T2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0g
ICAgICAgIC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAg
ICAgIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9k
ZTo6U3RyaW5ncyk7Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3Qs
ICZzdGF0ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFj
aCBlbGVtZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5cykgewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3du
UHJvcGVydHldXShrZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVz
Y3JpcHRvcjsKLSAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICgh
ZGlkR2V0RGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1d
IGlzIHRydWU6Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGNoZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQg
YnkgdGhlIGRlZmF1bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAg
ICAgICAgIGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRv
ci5lbnVtZXJhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUg
a2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAg
IGF1dG8gdHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQo
c3RhdGUsIGtleSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQo
Tywga2V5KS4KLSAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0
YXRlLCBrZXkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252
ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5
cGVkVmFsdWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkg
aW4gcmVzdWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAg
Ly8gTm90ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBw
aW5nICh0eXBlZEtleSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCh7IHR5cGVkS2V5LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAh
IE9iamVjdENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJl
cGVhdCwgZm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBl
c0tleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAg
ICAvLyBOb3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkg
dG8gYmUKLSAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAg
ICAgICAgICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01B
U2NyaXB0IHZhbHVlLgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBM
ZXQgY3JlYXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVl
KS4KLSAgICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6
OklkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7
Ci0KLSAgICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4o
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRF
bnVtZXJhdGlvbjxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAg
c3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJv
d2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7
Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6
OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVu
Y3Rpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFj
ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxU
Pj4gewordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE9iamVjdD4gewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
ICAgICB7CiAgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
VDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJ
bnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgot
c3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+
Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAg
ICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAg
ICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0
LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwg
dHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsK
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0
aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lk
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgot
dXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9u
dDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248
VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlw
ZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAg
ICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBu
dW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBh
bHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywg
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmlu
Z1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0
LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJy
aWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwot
ICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlz
dCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmln
YW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJy
YXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZG
cm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5
cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGlj
dGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rp
b25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBj
YW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5
VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNv
cmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2Fu
ZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVz
ID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwg
IlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBl
cyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5
cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNP
YmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlU
eXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAw
OwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxp
c3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9u
IHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVk
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29s
IGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVs
bCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0
eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAg
ICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0g
ICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0g
ICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAg
ICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAg
ICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0
LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYu
Ci0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAg
ICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQu
MikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJp
Z2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlw
ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VU
eXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZh
bHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVu
Y2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIElt
cGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAg
ICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAg
YXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1
cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
V1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8g
MTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2Jq
ZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAg
ICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2lu
ZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHBy
b3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0
eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2Qg
YmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJu
IHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
ICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJP
ZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNl
VHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0
ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUs
IHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0
aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
ZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAg
ICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96
ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJh
eVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJ
dGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1
bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2Ug
dHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlw
ZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSBy
ZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBW
IGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmln
YW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+
Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURM
Qm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZh
bHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmlj
IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVt
ZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdh
bmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051
bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4geyB9Owog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBz
dHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6
c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7Ci0gICAgICAgIGlmIChoYXNTdHJpbmdU
eXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5n
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNS4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBpZiAoaGFzTnVt
ZXJpY1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFz
TnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAg
Ly8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTcuIFRo
cm93IGEgVHlwZUVycm9yLgotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2lu
ZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBU
eXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBU
eXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5j
ZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9u
VHlwZT46OnZhbHVlPjsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IElt
cGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1dG8gaW5kZXggPSB2
YXJpYW50LmluZGV4KCk7Ci0KLSAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJl
dHVyblZhbHVlOwotICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8m
JiB0eXBlKSB7Ci0gICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFu
ZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICBpZiAo
STo6dmFsdWUgPT0gaW5kZXgpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVl
KTsKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxp
c3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBBU1NFUlQocmV0dXJuVmFs
dWUpOwotICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDAp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2Vy
aWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6
OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVs
bCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3Rl
bmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0
ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAg
ICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVm
UHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBv
YmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5B
QkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVy
dFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7
IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwogICAgIH0KIH07CiAKLSNlbmRpZgotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0K
LW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2lu
ZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1
Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2lu
ZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAg
dXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRl
bTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0
cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAg
IH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFy
aWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3Qg
bGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVu
Z3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1l
IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0g
ICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFs
dWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVy
biB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmVJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVj
b3JkLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNs
dWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgi
CisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJz
aW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcg
fTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9y
KCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsK
KyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYs
IEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRp
b25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERp
Y3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXpl
ZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0
RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhy
b3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9
CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lv
bi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29s
IG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRl
ck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZ
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3Rh
dGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4g
OiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6
OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0
cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5n
ZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+
IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZl
cnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElE
TFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+
PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNl
PFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAv
LyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJ
REwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWdu
ZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5j
dGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxs
XSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVs
bC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAg
Ly8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0
aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2Us
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRo
ZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxW
YWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9i
YWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAg
IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRo
cm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51
bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURM
TnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVs
bFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxs
YWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAg
IHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
c3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29s
ZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4o
JnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
b29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1
ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
QXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlC
dWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsK
KyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVz
aW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisK
Ky8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJl
ZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVy
ZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBl
clR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJD
bGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dy
YXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAg
ICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2Jq
ZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVm
KGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1
cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJl
Zihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpn
ZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFs
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRpYyB1
aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9y
dD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAg
ICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVk
U2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGlu
dDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50
MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7
CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQz
MigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
eworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwor
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0
YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAg
IHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExG
bG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91
YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVt
YmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Cisg
ICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAg
IH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAg
ICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5p
dGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRp
YVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0
cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0
cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7
CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5n
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
YmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3Rh
dGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJv
d2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkg
fTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisK
K25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAg
c3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5
cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAg
ICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwg
WyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFs
dWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwor
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGlu
Z1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUg
bnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUg
YXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0
cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29u
dmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAg
ICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjpp
c0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBh
cnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xv
YmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0
aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhp
bmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsK
KworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkg
eworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgw
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNo
YXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMy
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91
YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5
LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVj
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3Rh
dGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFz
QXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5p
c0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAg
ICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUg
cmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5
LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3Vz
KClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBl
Pjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7CisK
KyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxP
YmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAg
ICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xv
YmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1
Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJl
dHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFp
bCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRl
bnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0
ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBL
ZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVl
VHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4g
SWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBh
IFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpT
Qzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAg
ICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4K
KyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5h
bWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9i
amVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQsIGZv
ciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tH
ZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRv
ciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAg
aWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJh
YmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFu
ZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKwor
ICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNj
cmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtl
eSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAg
ICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29u
dmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/
IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdl
dCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVl
IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAgIGF1
dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBh
IGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAg
ICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0Lgor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBh
IG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAg
ICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0
IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1
bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAgLy8g
Mi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8gMS4g
TGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAg
ICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhl
IGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4K
KworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFu
IEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0
YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8v
IDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVz
VmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0s
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1Zh
bHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwor
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFy
eTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9u
YXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisv
LyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29u
dmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4K
KyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsK
KyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9u
KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50
ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExD
YWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJm
YWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVj
dCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6
OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBV
bmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJv
b2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJu
VHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBl
LCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQs
IGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJv
bnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6
ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAg
c3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1c2lu
ZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29s
IGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNv
bmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+Owor
ICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVz
aW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1i
ZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51
bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAg
c3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJp
Y1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVy
aWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNpbmcg
U3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9v
ZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1
ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJP
ZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxT
dHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNl
cXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8
YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNl
cXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5n
IEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJv
emVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+
Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAw
IHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBG
cm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJh
eVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJy
aWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmln
YW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25k
aXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisg
ICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
UmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVy
T2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29y
ZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJl
ck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxG
cm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVj
b3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEu
IElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxs
IG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjpp
c19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVs
bFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVu
aW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1m
bGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVm
aW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlw
ZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUs
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFy
eSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29y
ZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBs
ZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8g
dGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0
LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9i
amVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVj
dCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2Vh
Y2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgICAg
IGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92
ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAg
ICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRh
dGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6
OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKworICAg
ICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZt
LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgor
CisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAg
ICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkg
eworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcg
Y29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRo
YXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVz
IGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAx
LiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCku
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRl
ZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VU
eXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3pl
biBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExl
dCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5l
ZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2Qu
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAo
aGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0
ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJh
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25h
cnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDUu
IElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJh
Y2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIu
NikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAx
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xl
YW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwg
YnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgeworICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYgViBp
cyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJp
Y1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAg
ICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFt
ZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051
bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdU
eXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVy
cm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURM
VW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlz
dDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpw
dHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVl
PjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9u
VHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4
KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOwor
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7Cisg
ICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0g
aW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5k
ZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhp
c09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0
ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAor
ICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURC
S2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBX
ZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5n
IEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5n
IEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAgICB1
c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVt
OworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3Ry
dWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07CisgICAg
fTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVfdCBs
ZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5n
dGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUg
RGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVjb3JkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0UmVj
b3JkLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFJlY29yZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMTkyICsyNSwzOCBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklE
QkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29udmVydFN0cmluZ3MuaCIKKyNpbmNsdWRl
IDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Ly8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNs
YXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9p
ZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24p
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6
SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
IGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8g
U3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJz
aW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMo
KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4
Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1
ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJv
d1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYp
OwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9u
IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0
RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1z
dHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3Ry
dWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0
cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhV
JiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5o
YXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJv
d1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9Owot
ICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29u
c3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lv
blR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExO
dWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETElu
dGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElE
TEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAg
ICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0g
ICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNp
b24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJl
aW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2Fs
bGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9i
amVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8v
IHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAg
ICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhl
biByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4g
T3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1
bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUo
KTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAg
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVy
PFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1
ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsK
LSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFs
dWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51
bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUu
dG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBK
U0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmll
dzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmll
dz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVy
blR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsK
LQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVz
aW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+
OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAg
ICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVy
VHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0
KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVy
biBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBn
ZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4m
IHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYg
Z2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50
OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50
OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0
ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAg
ICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAg
IHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3Rh
dGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0
dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0
b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRv
VUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAg
IHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2
YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9u
Zz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExM
b25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0g
ICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5n
ZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9u
Z0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7
Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0g
ICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlw
ZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAg
IHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERv
dWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51
bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRo
cm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1i
ZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9h
ZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRp
bWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0Rv
dWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29u
dmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwo
KSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRv
Qnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVU
b1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmpl
Y3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlr
ZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBS
ZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwg
anNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNv
bnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVy
aWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUg
SURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0
IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29w
ZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlw
ZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcg
R2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAg
ICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVy
aWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6
SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICgh
YXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25P
YnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFy
cmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdU
eXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdT
aGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1
b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpT
Qzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBh
cnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFs
dWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9
PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46
OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0
ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAg
dGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9i
amVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNB
cnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpj
b252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5
ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxP
YmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBv
YmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7
Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1
bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9Owot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5
cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0g
ICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+
Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFs
dWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRl
LCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBp
bmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBj
b252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1
ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBl
OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBO
dW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0
cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1
cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3Qg
U2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKK25hbWVz
cGFjZSBEZXRhaWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKK3RlbXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CitzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVD
YXBhY2l0eT4mIHZlY3RvcikKK3RlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgZWxlbWVudCkpOwotICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhl
YywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBpZGVudGlm
aWVyLnN0cmluZygpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5B
cnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVl
bmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3RlbXBsYXRl
PD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKICAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNl
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKICAgICB9CiB9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3RlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQogICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAg
ICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwot
ICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIs
ICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1
Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNW
U3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0g
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
LSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
aWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAg
ICAgfQotICAgIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7CkBAIC0xMzE3LDU4NCArMTYzLDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlw
ZW5hbWUgVj4gc3RydWN0IAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rp
b25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERp
Y3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAg
dXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCi0gICAgewotICAgICAg
ICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rp
b25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGlj
IFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9K
UyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJh
Y2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAg
ICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSks
ICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJl
ZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmpl
Y3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0
dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29u
dmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3Ry
dWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUo
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2Ug
RGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAg
ICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+
Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAg
IHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxz
ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9u
dCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0
eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBU
eXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBl
OjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6Zmls
dGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVz
ID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
bnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAh
PSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVt
ZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6
ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJp
bmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAw
IG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5
cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVz
ICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxU
eXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VU
eXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAx
IHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlw
ZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5
cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZp
bHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJy
YXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcg
RGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rp
b25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFs
dWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25h
cnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2lu
ZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBo
YXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNv
cmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBl
cyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
cmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJl
Y29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBl
PjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9m
U2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlv
bmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJm
YWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJy
aWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxs
YWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURM
IHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2Fu
ZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFs
dWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURM
TnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVk
IG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24g
aXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAz
LiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9u
YXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0
aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5
cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgaWYgKGhhc1Jl
Y29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5
cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0g
b2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50
ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
dGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBp
cyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAgKEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdh
bmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsK
LSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAg
ICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0
eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5
cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBS
YXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1c2luZyBX
cmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBl
Pjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdy
YXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoIWNh
c3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9u
VHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChy
ZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQg
b2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgewotICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3Qo
KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
b3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAg
ICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBp
cyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRN
ZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4g
UmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAz
LiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRp
bmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQg
dHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9y
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNl
VHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElm
IHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhv
ZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1
cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElm
IG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBh
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQg
dHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwg
dmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRv
cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5B
cnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vICAg
ICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhl
IHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRv
IHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlv
bmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0
aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVz
IGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBl
KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwg
aGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRl
cmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhh
dCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQot
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0
aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVj
dCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwg
dGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0
ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYg
KGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBj
b25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVM
aXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUg
PSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYg
KGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBl
LCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAg
ICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAg
IGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVy
aWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsK
LQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAgICBpZiAoaGFz
Qm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBo
YXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAg
ICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4g
ewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9
IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9
IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjpt
YWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1w
bGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0
byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQotICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6
SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNl
PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6
OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAg
ICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewotICAgICAgICAgICAgICAgIEFTU0VSVCgh
cmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5k
OjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVl
Pih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VS
VChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKLSAg
ICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRl
LCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2Uo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxU
Pj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6
IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQg
TGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVy
ID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0
ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAgIHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVy
blR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBS
ZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1
ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jl
c29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19
OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJREJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07
Ci0KLSNpZiBFTkFCTEUoV0VCR0wpCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55
IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi0jZW5kaWYKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFk
aWMgdGFpbCBjb252ZXJ0aW9ucwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlIHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOwotCi0gICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZh
Y2U8VD4+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47
Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
YXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigq
cmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExUeXBlPiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZl
cnRlckJhc2U8SURMVHlwZT46Okl0ZW07Ci0gICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3Rv
cjxJdGVtPjsKLQotICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKLSAgICAgICAgICAgIHNpemVfdCBh
cmd1bWVudEluZGV4OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3Vt
ZW50czsKLSAgICAgICAgfTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBl
PiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29u
dmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0
SW5kZXgpCi17Ci0gICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKLSAg
ICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxs
b3B0IH07Ci0KLSAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpDb250YWluZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxl
bmd0aCAtIHN0YXJ0SW5kZXgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0Nv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQo
aSkpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpu
dWxsb3B0IH07Ci0gICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OwotfQot
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVt
ZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7CisKK2VudW0g
Y2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFu
Z2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsg
Tm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVjdCBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2Jq
ZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJv
d2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKKworLy8gU3BlY2lh
bGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElE
TCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRp
b25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVj
dGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5
cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorewor
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5s
aW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252ZXJzaW9uIGZyb20gSW1w
bGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29k
ZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBK
U0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7
CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0
cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2Us
IGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
eworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0
dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBn
bG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5
Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxV
PiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsK
KyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxl
YXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVu
dGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFueSB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOworICAgIAorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChj
b25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9u
ZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQo
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsYWJsZSB0eXBlCisKK25h
bWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7CisgICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBl
OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBOdWxsYWJs
ZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExB
bnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpS
ZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVy
c2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2Jq
ZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1l
ZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0
eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAvLyB0aGF0IGlzIGFubm90
YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVs
bGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8KKyAgICAvLyBOT1RFOiBI
YW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBu
dWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZh
bHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KKworICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKKyAgICB9CisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
VDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVs
bFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxs
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25U
aHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIElt
cGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051
bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVG
cm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RW
YWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBE
ZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29s
ZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBib29sIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2
YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KK3RlbXBsYXRlPD4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Cisg
ICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOworICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307CisKKy8vIEFycmF5QnVm
ZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0g
SlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0g
UmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4K
K3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKKyAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OworICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJh
eVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZXJmYWNlIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBw
ZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25U
aHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJu
VHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAg
IGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCituYW1lc3Bh
Y2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJl
Zihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25z
dF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJP
clJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVy
biBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdlciB0eXBlcworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5
dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExC
eXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7CisgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNo
b3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBzdGF0aWMgaW50MTZfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNp
Z25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7CisgICAgc3Rh
dGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihu
dW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2ln
bmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHN0YXRp
YyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9V
SW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1
ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
SW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRD
bGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDY0KHN0
YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgdWludDY0X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigp
KQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9V
SW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJ
bnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEZsb2F0aW5nIHBvaW50
IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0
Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVt
YmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikp
KQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1i
ZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3Vi
bGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICBzdGF0aWMg
aW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisg
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
KworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERP
TVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwor
ICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBPYmplY3QgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
KyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQorICAg
ICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGZvckVh
Y2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0
YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gU3Bl
Y2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5
IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBU
byBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVy
bG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAorICAgIC8vIHRha2VzIGFu
IEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0
KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigp
W2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5k
ZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFs
dWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29w
ZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4
KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAg
IHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlw
ZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVy
OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAg
ICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAg
ICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8K
KyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6Oklu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6Oklu
ZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZh
bHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7CisgICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9u
Zz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVy
blR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAg
IHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0
LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAg
ICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZn
bG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7CisKKyAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4geworICAg
ICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewor
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9
CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8Sywg
Vj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxl
bWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBv
ZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9y
IE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisgICAgICAgIC8vIDMuIElm
IFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAK
KyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAgIC8vIDQuIExldCBrZXlz
IGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7CisgICAgICAg
IG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpF
bnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlz
IGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAg
ICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgorICAg
ICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKKyAgICAgICAgICAg
IGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBu
b3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJh
YmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKKyAgICAg
ICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAgIGlmICghZGVzY3JpcHRv
ci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJ
REwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRh
aWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7CisKKyAgICAg
ICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KKyAgICAgICAgICAg
ICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOworICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAg
ICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVl
IG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8
Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZh
bHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFw
cGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA1
LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRW
YWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZh
bHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNi4gUmV0dXJu
IHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0
UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGlu
ZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBh
aXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVk
IHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAg
aXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKKyAgICAgICAgICAgIC8v
IGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAgICAgIC8vIDIuIExldCBl
c1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAg
ICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1
ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0
ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAgICAgICAgICAgIGJvb2wg
Y3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDQu
IEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVh
dGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQu
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlv
bmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRW51bWVy
YXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAg
ICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENh
bGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0
KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlND
Ojphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
VSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+CitzdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4geworICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KK307CisKK25h
bWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgorICAgIHsK
KyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExp
c3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7CisgICAgfTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Cit1c2luZyBDb25kaXRp
b25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRp
dGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAg
IHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVu
YW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXpl
PE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1l
cmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIE51bWVy
aWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJp
Y1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9y
IElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmln
YW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcg
U3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3Ry
aW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxT
ZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgU2Vx
dWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxG
cm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47CisKKyAg
ICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09
IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
ZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwor
ICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlw
ZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpz
aXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJl
Y29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7CisgICAg
dXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1Jl
Y29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAo
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7CisKKyAgICB1c2lu
ZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRl
cmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRl
cyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUg
PSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpf
MT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7CisgICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBm
bGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgorICAgICAgICAvLyBOT1RF
OiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KKyAgICAgICAgCisgICAg
ICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKKyAgICAgICAgaWYgKGhh
c0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICBp
ZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICBp
ZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
UmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQuIElmIFYgaXMgYSBw
bGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgLy8gICAgICAg
ICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQorICAgICAgICBp
ZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2
YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1
ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0o
YXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0
eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworICAgICAgICAgICAgICAg
IHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOworICAgICAgICAgICAgICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZh
bHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVt
ZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVy
blZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAvLyAxMS4gSWYgViBpcyBh
bnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICBKU0M6OkpT
Q2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAgICAgIGlmIChjZWxsLT5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQorICAgICAg
ICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhl
IHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Cisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0
IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ug
b2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBl
cyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qo
c3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
SXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
U2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2Yg
R2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNy
ZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkg
b2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
IT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9k
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmICho
YXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMg
aW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Jl
Y29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNv
cmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxi
YWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVw
IDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBv
YmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFu
IHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29s
ZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgor
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBl
TGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAg
ICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xl
YW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNC
b29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Cisg
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisg
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1l
cmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTQuIElm
IHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3Ry
aW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAg
ICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0
cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4K
KyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAg
IGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJv
b2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
CisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5
cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgSW1wbGVtZW50YXRp
b25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2luZyBTZXF1ZW5jZSA9IGJy
aWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRf
c2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCisgICAgeworICAg
ICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8
U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVu
YW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBl
OworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pT
PGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8
STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAg
ICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVl
KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0ZSB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0
ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91
YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09OIHR5cGUKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09O
PiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lm
eSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpT
T05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxP
YmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlz
dGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworCisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOworCisgICAgICAgIGF1dG8g
bGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29y
bGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0Owor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktleSB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURM
V2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFu
eT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUp
OworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdXBwb3J0IGZv
ciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CisKKyAgICAg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElE
TEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFs
PEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlh
ZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAgdXNpbmcgQ29udGFpbmVy
ID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQgeworICAgICAgICAgICAg
c2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5l
cj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJl
c3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXpl
X3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3Vu
dCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAgICByZXR1cm4geyAwLCBz
dGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJ
bmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZh
cmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4geyBp
LCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQp
IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFNlcXVlbmNlcy5oCShyZXZpc2lvbiAyMTE1
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXF1ZW5jZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTg3NiArMjUsMjkzIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGll
cy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVy
dEJhc2UuaCIKKyNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUgLT4gSW1wbGVtZW50YXRpb24K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7Ci0KLWVudW0gY2xhc3MgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1w
IH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBU
cmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
ciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYpOwot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkg
Z2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJh
dGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RkOjpvcHRpb25hbDxUPiBw
YXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNoYXIqIGV4cGVjdGVkRW51bWVy
YXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIHJldHVybiBDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRp
b25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRp
b24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURM
IGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3Ry
aW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0YXRlJiwgVCk7Ci0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
U3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9i
YWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCB0cnVlPiB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUs
IGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9i
YWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFs
dWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHRvSlM8
VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZh
bHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydE5ld2x5Q3JlYXRlZChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRl
ciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRlcjxJRExBbnk+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVu
a25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0eXBlCi0KIG5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bGxh
YmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKLSAg
ICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIH07
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNp
b25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
Q29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExBbnk+IHsKLSAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExBbnk+OjpSZXR1cm5UeXBl
OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8
VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBhbmQg
dGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5nIHBlcmZvcm1lZAotICAgIC8v
IGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEg
bnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0IGlzIGFubm90YXRlZCB3aXRo
IFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlw
ZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAvLyBOT1RFOiBIYW5kbGVkIGVs
c2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwu
Ci0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUgVC4KLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0KTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6
OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
LSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4o
ZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0K
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNO
dWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51bGwg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxscHRyX3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGw+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQm9v
bGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCb29sZWFuPiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBib29sIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9v
bCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzQm9vbGVhbih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyPiB7Ci0gICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAgIHVzaW5nIFRvV3JhcHBlZFJl
dHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8vIEFycmF5QnVmZmVyVmlldyBz
dXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0Fy
cmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMgc3VwcG9ydC4KLXRlbXBsYXRl
PHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlND
OjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xh
c3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+OwotICAgIHVzaW5nIFRv
V3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRh
cHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5U
eXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmpl
Y3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWls
IHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBU
KiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQm
PihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHJPclJlZihjb25z
dCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBwKSB7IHJldHVybiBwLmdldCgp
OyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETElu
dGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGU+IHsKLSAg
ICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4g
dG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9J
bnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExCeXRlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
T2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFNob3J0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMgaW50MTZfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFNob3J0PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0
PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgc3RhdGljIGlubGlu
ZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHN0YXRpYyB1aW50MzJf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQz
MkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQz
Migmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExv
bmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVy
PElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2
NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRDbGFt
cChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ2NChzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWdu
ZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50IHR5cGVzCi0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVy
PElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQotICAg
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZEZs
b2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBEZWZhdWx0Q29u
dmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVtYmVy
KQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQot
ICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAg
ICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERvdWJsZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRv
dWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51
bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91Ymxl
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERvdWJsZTo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLQotICAgIC8v
IEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
dHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERPTVN0cmluZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2
YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAg
ICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVl
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0cmluZz4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1
ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgICAgICBy
ZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0
PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNl
cHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
ewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHsgdm0s
IEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewot
ICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVhY2hJbkl0ZXJh
YmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1Zh
bHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3BlY2lhbGl6YXRp
b24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5IGltcGxlbWVu
dGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBUbyBhZGQKLSAg
ICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0
ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAg
ICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252
ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0g
ICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAg
ICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKLSAgICAg
ICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2Nv
bEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWND
b252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRo
cm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpT
Qzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpT
Qzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0g
SlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZh
bHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdldCgp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5p
c0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtp
XTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91Ymxl
VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwg
aSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0
ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
RExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdl
bmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAg
ICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5U
eXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYg
KCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmlj
Q29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFy
cmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2Jz
ZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJh
eS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlw
ZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hh
cGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91
c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlND
Ojpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0
SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAg
ICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChz
dGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAg
IHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVyblR5cGU7Ci0K
LSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICAgICAg
dXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4K
LSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBE
ZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcXVl
bmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5k
KHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAgIHJldHVybiBK
U0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZy
b3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96
ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owot
ICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAgICBsaXN0LmFw
cGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAgICAgICBhdXRv
KiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgm
ZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFJlY29yZCB0
eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFN0cmlu
Z1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAgICAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
IGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyLnN0
cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50
aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50
aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9CeXRlU3Ry
aW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0gICAgfTsK
LX0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENvbnZlcnRlcjxJ
RExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxlbWVudGF0aW9u
VHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5
cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU+OwogCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNP
YmplY3QpCiAgICAgewotICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQg
cmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAg
Ly8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAg
ICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICAKLSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0
aHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIAogICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKLSAgICAKLSAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlz
XV0oKS4KLSAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9w
ZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5h
bWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBl
YXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAg
Zm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/
IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVz
Y3JpcHRvciBkZXNjcmlwdG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0g
b2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3Ip
OwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAg
ICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tF
bnVtZXJhYmxlXV0gaXMgdHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6
IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRo
aXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9k
ZT8KLQotICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAm
JiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0
eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAg
ICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxL
Pjo6Y29udmVydChzdGF0ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1
ZSBiZSA/IEdldChPLCBrZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmpl
Y3QtPmdldCgmc3RhdGUsIGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJl
IHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAg
ICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFs
dWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxy
ZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAg
ICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2Jq
ZWN0LgotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJl
c3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKyAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZy
ZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKSB7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKLSAgICAgICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVl
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZl
cnRlZFZhbHVlKSk7CisgICAgICAgIH0pOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKKy8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJ
RExMb25nLiBUbyBhZGQKKy8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFu
IG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisvLyB0YWtlcyBh
biBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgordGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KK3N0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgewor
ICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VHlwZT47CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6
OlJldHVyblR5cGU7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQogICAgIHsKICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAv
LyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAg
ICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAg
ICAKLSAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBp
biBEOgotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAg
ICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlw
dCB2YWx1ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQs
IGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwg
bm90IGEgSlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFs
dWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0K
LSAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJl
c3VsdCwgZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0
LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVl
UGFpci5rZXkpLCBlc1ZhbHVlKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCi0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4K
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsK
LQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25h
cnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlv
bmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgaWYgKCFKU0M6Omlz
SlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNv
bnZlcnQoc3RhdGUsIG9iamVjdCk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9u
PFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKKyAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJh
eSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmpl
Y3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlv
bjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwogCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0K
LX07CisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICBpZiAoIXJlc3VsdC50cnlS
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSBy
aWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KIAotLy8gTUFS
SzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorICAgICAgICBKU0M6OkluZGV4
aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4
aW5nU2hhcGVNYXNrOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElE
TENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRp
b25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgaWYg
KGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
CisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpj
b252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3Qp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxs
YmFjayBpbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tJbnRlcmZhY2U8VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
ID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9
IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhy
b3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigpW2ldLmdl
dCgpOworICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlz
SW50MzIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFz
SW50MzIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CiAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwg
Jmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBVbmlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5
cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKyAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91Ymxl
KClbaV07CisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFsdWUpKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25h
bDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkpOwotICAgIH0KLX07CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFs
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogfTsKIAotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlz
dCwgYm9vbCBjb25kaXRpb24+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3Qs
IHRydWU+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9p
ZDsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4K
LXVzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJv
bnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9u
PFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5
cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHVzaW5nIE51bWVyaWNU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6
XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwg
bnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCi0gICAgdXNpbmcgU3RyaW5nVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcs
IGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJp
bmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0
aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKLSAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlz
dCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+
PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0
KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsK
LSAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxp
c3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKLQotICAgIHVzaW5nIEZyb3plbkFycmF5
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJp
Z2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0
eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25k
aXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBl
cyAhPSAwPjsKLQotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRl
cjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERp
Y3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFy
eVR5cGVzICE9IDA7Ci0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250
PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+OwotCi0gICAgdXNpbmcgUmVj
b3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdh
bmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNz
ZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEs
ICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlw
ZXMgIT0gMDsKLSAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRU
eXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFz
T2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5
VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4g
MDsKLQotICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVM
aXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OwordGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4KK3N0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgdXNpbmcgR2VuZXJpY0NvbnZl
cnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKIAogICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCiAgICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1
ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSBudWxsLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlw
ZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6
Ol8xPj46OnZhbHVlOwotICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhl
IGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCi0gICAgICAgIC8vIE5P
VEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgotICAgICAgICAKLSAg
ICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgotICAgICAgICBpZiAo
aGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgewotICAgICAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYg
dHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAg
IGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgotICAgICAgICAgICAgICAg
IGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAotICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxh
dGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAg
ICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUg
dGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgIC8vICAgICAgICAg
KEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKLSAgICAgICAgaWYg
KGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFs
dWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7
Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1
dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlw
ZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlw
ZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICAgICAgICAgICAgICB1
c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKLSAgICAgICAgICAgICAgICB1
c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxS
YXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1
ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVu
dGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7CisgICAgICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICBpZiAoIUpT
Qzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRl
cjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKIAotICAgICAgICAgICAgaWYgKHJldHVyblZhbHVl
KQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0
ZXBzIDUgLSAxMC4KKyAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShv
YmplY3QpOworICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJh
dG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CiAKLSAgICAgICAgLy8gMTEu
IElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAoaGFzT2JqZWN0
VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAg
ICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1
c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3Zl
ZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBl
LCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUg
dGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAg
IHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJh
dG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRo
ZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUg
cmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJv
emVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAgICAgICAgICAg
ICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5B
cnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5
cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVy
YXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQu
IElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJu
VHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlw
ZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMg
aW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZl
cmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBhcnJheS0+bGVuZ3RoKCk7CiAKLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZh
bHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlz
dCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAg
ICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4o
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29s
ZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmlj
VHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICgh
cmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4K
LSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3Ry
aW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVz
IGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBl
KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5
cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4g
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9
IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlw
ZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1w
bGVtZW50YXRpb25UeXBlOworICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwogCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5j
ZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZh
cmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhW
YWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKLSAgICB7Ci0gICAgICAgIGF1
dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKIAotICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgIGJy
aWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAg
IHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5
cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewot
ICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxP
YmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBy
ZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IERh
dGUgdHlwZQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCi10ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+
IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGly
ZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmlu
ZWQoKTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSlNPTiB0
eXBlCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz46OlJldHVyblR5cGU7CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09O
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZh
bHVlLCAwKTsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25n
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Cit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+
IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKIAotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQordGVtcGxhdGU8Pgorc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46
OlJldHVyblR5cGU7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAg
ewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwordGVtcGxhdGU8Pgorc3RydWN0IFNlcXVlbmNl
Q29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKIAotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRl
LCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBOdW1lcmlj
U2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwogICAg
IH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKK3RlbXBs
YXRlPD4KK3N0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PFQ+OwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1
ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYg
KCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwot
ICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgICAgIHJldHVybiBOdW1lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0
eXBlCit9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhO
U1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlw
ZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNz
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlv
blRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJU
eXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgh
b2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKICAgICB9CiB9OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsK
ICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBE
ZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFs
dWUpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgSlNDOjpN
YXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2
ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywg
bnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CiAgICAgfQogfTsKIAotLy8gTUFSSzogLQot
Ly8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsK
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CiAgICAgfQogfTsKIAotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExX
ZWJHTEFueT4gewordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZy
b3plbkFycmF5PFQ+PiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOwogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7
CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGds
b2JhbE9iamVjdCwgdmFsdWUpOworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAg
IGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2Jh
bE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJl
ZXplKCZleGVjLCBhcnJheSk7CiAgICAgfQogfTsKIAotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNl
IERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0g
ICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0
eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpu
dWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVt
ID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAg
ICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3Vs
dCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZl
cnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBz
dGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAg
ICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpW
YXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2
YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3Ro
LCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjExNTQ4KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaDoyMTE1NDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pT
R2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IElt
cGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitl
bnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3Jj
ZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAgeworICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9u
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6
b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBl
eHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
K3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09i
amVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9t
IEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVk
IGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1
ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZh
bHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnRO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
T3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkp
KSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
QW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUu
Z2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQor
CituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgeworICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9u
VHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8
SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55
Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90
IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJm
b3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hv
c2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBh
bm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURM
IG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9U
RTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBU
PyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
KyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7CisgICAgfQorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2lu
ZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6
aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Cisg
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Qm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9v
bCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xl
YW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4g
eworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJh
eUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBv
cnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsK
KyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFj
ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9X
cmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJl
dHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKworbmFt
ZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRy
T3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4g
Y29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyBy
ZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEludGVnZXIgdHlwZXMKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0
Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7CisgICAgc3RhdGljIGludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQx
NkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1w
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
aG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAg
IHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50
MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBz
dGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2
NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBw
b2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91Ymxl
IG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUg
bnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5
cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KKworICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051
bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
ZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0K
KworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0
ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKKworbmFtZXNwYWNlIERldGFpbCB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJ
RExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkK
KyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0s
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8v
IFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMg
b25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9u
Zy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4g
b3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtl
cyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9i
amVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4
Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhp
bmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5k
ZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdl
dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50
MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8
IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJs
ZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
c2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJ
bmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAg
ICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZl
cnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAg
ICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAg
ICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAg
ICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhy
b3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlND
OjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlND
OjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRl
eFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
KworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4geworICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpS
ZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOworICAg
ICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9i
amVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAg
ICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsK
KyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRy
LCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOworCisg
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
KyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAg
ICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBW
Pjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFu
Y2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5l
ZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIAorICAgICAgICAvLyAz
LiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgorICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Cisg
ICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgIAorICAgICAgICAvLyA0LiBMZXQg
a2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5
TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAg
ICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yg
a2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAg
ICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4K
KyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAg
ICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3Ip
CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8vIDIuIElmIGRlc2Mg
aXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51
bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Cisg
ICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPworCisgICAgICAgICAgICBpZiAoIWRlc2Ny
aXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8g
YW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0g
RGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisg
ICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCisgICAgICAg
ICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAg
ICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2
YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVy
dGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0
cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5
cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlw
ZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDYuIFJl
dHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVydGVyPElETFJlY29yZDxL
LCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9i
amVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1h
cHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFs
dWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZl
cnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBz
dGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAg
ICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgorCisgICAgICAgICAgICAvLyAyLiBM
ZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAg
ICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5
VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBD
cmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBi
b29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOworCisgICAgICAgICAgICAv
LyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAzLiBSZXR1cm4gcmVz
dWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETERp
Y3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisg
ICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxP
YmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVu
dW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7
CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVyYXRpb248VD4oc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVu
dW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09i
amVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Cisg
ICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7Cisg
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8
dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENv
bmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBl
bmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+
IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9Owor
CituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNv
bmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAg
ICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxMaXN0PjsKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9u
dDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29u
ZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBj
b25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsK
KyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0
eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
VHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmlnYW5kOjpfMT4+OworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
TnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBO
dW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51
bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNr
IGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6
XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQo
bnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVz
aW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJP
ZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdh
bmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBj
YW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5n
IFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+
OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+Owor
CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0
LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5
cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0g
MDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFy
eVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlz
dCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsK
KyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVy
T2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNh
biBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOwor
ICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBo
YXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBl
ID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51
bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAg
dXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
SW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5j
bHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJl
dHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxU
eXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2Fu
ZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNOdWxsVHlwZSkgeworICAgICAgICAgICAg
aWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0
aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8g
Tk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAor
ICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlm
IChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7CisgICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICAgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAg
ICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA0LiBJZiBWIGlz
IGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAg
IC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwg
dmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAg
ICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAg
ICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+
Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJu
VmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4o
WyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5
cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0
aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAg
ICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAg
ICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisgICAgICAgICAgICAgICAgYXV0byBjYXN0
ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKElt
cGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShy
ZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYg
aXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkg
eworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgSlND
OjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgICAgICAgICBpZiAoY2Vs
bC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0
IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVu
OgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJl
c3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1
bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIHNlcXVl
bmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNl
VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0
aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5IHR5cGUsIHRoZW46Cisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0
IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgZnJvemVuIGFy
cmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1l
dGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhl
biByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY29u
dmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1
cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5
cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIGlmICho
YXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
UmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBj
YWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQg
c3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVk
ZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9v
bGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEg
Ym9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVh
bi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8
VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsK
KyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92
ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwg
aGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVu
OgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBl
LgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8
TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhh
c1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsK
KyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3Zl
PFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVl
KCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5
cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFu
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgorICAg
ICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJ
RExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2lu
ZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVu
dGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2Ug
PSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJp
YW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsK
KyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9w
dGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9l
YWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0
eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6
dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0g
dG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6
Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52
YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUo
JnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSlNPTiB0eXBlCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
SlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJp
bmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
OjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRy
PFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xv
YmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVu
dExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKKworICAgICAgICBh
dXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVu
dFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5l
cjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlw
ZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAg
IHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAg
ICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVj
dDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2Vi
R0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZh
bHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9y
dCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJ
dGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisg
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRp
b25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGlj
Q29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBW
YXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRh
aW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAg
ICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250
YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+
OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
c2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50
Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsg
MCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVy
dGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisgICAgZm9yIChzaXplX3QgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWls
OjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVj
a2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVz
dWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAkocmV2aXNpb24gMjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDE3MDkgKzI1LDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVy
U291cmNlLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklE
TFR5cGVzLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVkZSAiSlNET01Db252
ZXJ0U3RyaW5ncy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJv
bSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7
IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1z
dHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0
aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93
ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlv
bmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFy
eShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xv
YmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Y29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8g
Q29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBV
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlv
bk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNT
dGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1
ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
TnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46
OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpS
ZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBD
b252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0
YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElm
IFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1
ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBh
biBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0g
ICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVu
IHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAg
IC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBP
dGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
bnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVy
IElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJs
ZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxP
YmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGlj
IHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51
bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsK
LSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1
cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlND
OjpBcnJheUJ1ZmZlcj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1
ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7
Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlw
ZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IEludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0g
ICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4o
cCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3Qg
VCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdl
dCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0
IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElu
dGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
Y3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3Rl
dD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0g
ICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1
cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9y
dDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3Rh
dGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBz
dGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0K
LSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAg
c3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigp
OwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVy
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVt
YmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0
aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJs
ZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
bnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJp
bmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
ewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogT2JqZWN0IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNw
YWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3Qg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZl
Y3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0KiBqc09iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7
Ci0gICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3Vs
dF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8g
RklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRU
eXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmlj
IHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRo
YXQKLSAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMg
YXJndW1lbnRzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIg
PSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJh
eShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
SlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmpl
Y3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0K
LSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgp
LT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFw
ZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
dGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShv
YmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJ
dGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBS
ZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBh
Y2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBl
eGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4
aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6
anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
ewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0
b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZWxlbWVudCkpOwotICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVs
bHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
dmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmpl
Y3QsIGVsZW1lbnQpKTsKLSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5
KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVy
Q29udmVydGVyOwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJ
RExET01TdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVu
dGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUg
PSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0g
dHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBu
ZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBl
KE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
IAotICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAg
ICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAg
ICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAm
c3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2gg
ZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtl
eSA6IGtleXMpIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blBy
b3BlcnR5XV0oa2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7Ci0gICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRp
ZEdldERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBp
cyB0cnVlOgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0
byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5
IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3Iu
ZW51bWVyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtl
eSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBh
dXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0
YXRlLCBrZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8s
IGtleSkuCi0gICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwga2V5KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBl
ZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGlu
IHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8v
IE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGlu
ZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
eyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBP
YmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBl
YXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29u
c3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNL
ZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAg
Ly8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRv
IGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAg
ICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGds
b2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0
IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSku
Ci0gICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwot
Ci0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyAzLiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQm
IGRpY3Rpb25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51
bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0
YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewot
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2Ug
dHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNr
SW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMo
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFi
bGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+
IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8
TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxM
aXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3Qg
Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUg
PSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9u
YWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNp
bmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVt
ZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmln
YW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVM
aXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0
cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5n
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5
cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5k
OjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VU
eXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVu
QXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJh
eTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFy
cmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2lu
ZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29y
ZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNv
cmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJl
Y29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBl
cykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhl
IHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5k
ZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8
SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkg
ewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIu
IExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlw
ZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50
ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRo
ZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUu
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUu
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2Jq
ZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYu
Ci0gICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBz
dGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZh
Y2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRl
cmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRS
ZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlw
ZTsKLSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAg
ICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAg
ICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAo
aGFzT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5
IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBo
YXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1
ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBt
ZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwg
cmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Nl
cXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9
IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5
IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhv
ZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAg
ICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96
ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3Ig
PSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRl
cmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4g
SWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEy
LiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUg
PSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5k
OjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVt
YmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBu
dW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9
IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYg
KGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0
Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byBib29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0g
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxU
Li4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAg
IHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZf
dDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2
YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAg
IGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAg
ICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBl
KHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0Rh
dGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURM
SlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKICAg
ICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCiAgICAgewpAQCAtMTc0NSwxNTYgKzQ3LDQgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1B
Uks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRM
aXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7Ci0KLSAgICAgICAgYXV0
byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRX
b3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0ZW5lcikKLSAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAotICAgICAgICByZXR1cm4gbGlzdGVuZXI7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBz
dGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMSURCS2V5IHR5cGUKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJ
RExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdM
QW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN1cHBvcnQg
Zm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRl
bT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKLQotICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8
SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9u
YWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0Nv
bnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOwotICAgICAgICB1c2luZyBDb250YWlu
ZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3RydWN0IFJlc3VsdCB7Ci0gICAgICAgICAg
ICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFp
bmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6
UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNp
emVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENv
dW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCi0gICAgICAgIHJldHVybiB7IDAs
IHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRl
cjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSBzdGFy
dEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6
VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tl
ZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiB7
IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3Vs
dCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmNwcAkocmV2aXNpb24gMjEx
NTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOjIx
MTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDgyIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MUGFy
c2VySWRpb21zLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9w
ZXJ0eShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBz
KTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgaWYgKCFz
dHJpbmcuY29udGFpbnNPbmx5TGF0aW4xKCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHN0
cmluZzsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0
cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb0J5
dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFs
dWVUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3RyaW5n
VG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQorewor
ICAgIC8vIEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBz
dXJyb2dhdGVzLgorICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgeworICAg
ICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5n
IHN0cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGgg
Zm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgorICAg
IGlmICghaGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIHN0cmlu
ZzsKKworICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNk
Zm4tb2J0YWluLXVuaWNvZGUKKyAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdp
dGggdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5n
VmlldyB2aWV3IHsgc3RyaW5nIH07CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29k
ZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5n
KEV4ZWNTdGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgU3RyaW5n
IHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3Ry
aW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcg
c3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUo
c3RyaW5nKSk7Cit9CisKK0pTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZh
bHVlKQoreworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworfQorCitk
b3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsK
KyAgICBpZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygp
KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0
KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKK30KKworYm9vbCBoYXNJdGVyYXRvck1ldGhvZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1l
dGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0
b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQo
KTsKK30KKworc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZmZjsKK3N0
YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOworc3RhdGljIGNv
bnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKK3N0YXRpYyBjb25zdCBpbnQ2
NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUzIC0gMSwg
bGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0LgorCitz
dGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUgbWluLCBk
b3VibGUgbWF4KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJpbmc6Om51
bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWyIs
IFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmluZzo6bnVt
YmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Cit9CisKK3N0YXRpYyBkb3VibGUgZW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91
YmxlIG1heGltdW0pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBz
dGQ6OmlzaW5mKHgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJh
bmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgeCA9IHRydW5jKHgpOworICAgIGlmICh4IDwgbWluaW11bSB8fCB4ID4gbWF4
aW11bSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9y
U3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIHJldHVybiB4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBJbnRUeXBl
TGltaXRzIHsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQ4X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKKyAgICBzdGF0aWMg
Y29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IElu
dFR5cGVMaW1pdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1heFZhbHVl
ID0gMjU1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1Njsg
Ly8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8aW50MTZfdD4g
eworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKKyAgICBzdGF0aWMg
Y29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVj
dCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IG1heFZhbHVlID0gNjU1MzU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3Rh
dGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlICYmIHN0
ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc2lnbmVk
IGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRz
VHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0
IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNJbnQz
MigpKSB7CisgICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKKyAgICAgICAgaWYg
KGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWluVmFsdWUg
OiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZCAlPSBMaW1pdHNU
cmFpdDo6bnVtYmVyT2ZWYWx1ZXM7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkID4g
TGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6
IGQpOworICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIExp
bWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKKyAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgIHJldHVybiBzdGQ6
OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisgICAgaWYgKHN0ZDo6aXNu
YW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB4
ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKKyAgICB4ID0gZm1v
ZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOworCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzIDogeCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGlu
ZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNf
aW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWduZWQgaW50
ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFp
dDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgdW5z
aWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZhbHVlLmlzVUludDMy
KCkpIHsKKyAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7CisgICAgICAgIGlm
IChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gTGlt
aXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJu
IGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKKyAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisgICAgaWYgKHN0
ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMp
KTsKK30KKworaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwor
fQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwor
fQorCitpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50OF90IHRvVUlu
dDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2Vi
SURMLyNlcy1ieXRlCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Cit1aW50OF90IHRvVUludDgoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
K30KKworaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKwor
dWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2lu
dDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50MTZfdCB0b1VJbnQxNkNsYW1w
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
clVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtc2hv
cnQKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKK3VpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKK2ludDMy
X3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Cit9CisKK2ludDMyX3QgdG9J
bnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4
KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOworfQorCit1aW50MzJfdCB0b1VJbnQzMkNsYW1w
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzVUlu
dDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6
IGNsYW1wVG88dWludDMyX3Q+KHgpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJ
REwvI2VzLXVuc2lnbmVkLWxvbmcKK3VpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFs
dWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJ
bnQzMik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7
CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01h
eEludGVnZXIpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdl
cik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpt
aW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50
ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50ZWdlcikp
OworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZworaW50
NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsv
LUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0
dXJuIG47Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQt
bG9uZy1sb25nCit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8v
IE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9k
dWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2Vy
KHgsIG4pOworICAgIHJldHVybiBuOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFN0cmluZ3MuY3BwCShyZXZpc2lvbiAyMTE1
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTYgKzIwLDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0
U3RyaW5ncy5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29tbW9u
Vk0uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIK
LSNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5j
ZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgog
CkBAIC0zNywyNSArMzAsNiBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5h
bWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBq
c051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0KLQotSlNWYWx1
ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQot
ewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUg
U3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCiB7CiAgICAgaWYgKCFzdHJpbmcuY29udGFpbnNP
bmx5TGF0aW4xKCkpIHsKQEAgLTcxLDcgKzQ1LDcgQEAgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVT
dHJpbmcoRXhlY1N0YXRlJgogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgU3RyaW5nIHN0cmluZyA9IGlkZW50
aWZpZXIuc3RyaW5nKCk7CisgICAgYXV0byBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwog
ICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmlu
ZykpOwogfQogCkBAIC04MCw3ICs1NCw3IEBAIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVj
U3RhdGUmIHN0YXQKICAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOworICAgIGF1dG8gc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgcmV0dXJu
IHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7CkBAIC0x
MjAsNyArOTQsNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTCiAK
IFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKIHsKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmco
KTsKKyAgICBhdXRvIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7CiAgICAgcmV0dXJuIHN0
cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7CiB9CiAKQEAgLTEyOSwzNTQgKzEwMywx
MCBAQCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUmIHN0YXRlCiAgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBh
dXRvIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CiAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKIAogICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZN
b3ZlKHN0cmluZykpOwogfQogCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0K
LQotZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVy
KCk7Ci0gICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6Omlu
Zm8oKSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09i
amVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRo
b2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENh
bGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBw
bHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0
ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZp
bmVkKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7
Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKLXN0YXRp
YyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3Qg
aW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAt
IDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4K
LQotc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1p
biwgZG91YmxlIG1heCkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5n
OjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdl
IFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6
Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOwotfQotCi1zdGF0aWMgZG91Ymxl
IGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0s
IGRvdWJsZSBtYXhpbXVtKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkg
fHwgc3RkOjppc2luZih4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
LCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIHggPSB0cnVuYyh4KTsKLSAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+
IG1heGltdW0pIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VF
cnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4geDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50
VHlwZUxpbWl0cyB7Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50
OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3Rh
dGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVj
dCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhW
YWx1ZSA9IDI1NTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAy
NTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2
X3Q+IHsKLSAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7Ci0gICAgc3Rh
dGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1z
dHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1i
ZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0g
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAm
JiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNp
Z25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExp
bWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMy
LWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkgewotICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAg
IGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhW
YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZh
bHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGQgJT0gTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
ZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1
ZXMgOiBkKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4g
c3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6
OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9
IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKLQotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcyA6IHgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBp
bmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6
OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVk
IGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRz
VHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0
IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc1VJ
bnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwotICAgICAg
ICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJl
dHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0g
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICBy
ZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlm
IChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFs
dWVzKSk7Ci19Ci0KLWludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
KTsKLX0KLQotdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
KTsKLX0KLQotaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDhfdCB0
b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtYnl0ZQotaW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19
Ci0KLXVpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQot
Ci1pbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZD
bGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LXNob3J0Ci1pbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1p
bnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOwotfQotCi1pbnQzMl90
IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNu
YW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKLX0KLQotdWludDMyX3QgdG9VSW50MzJD
bGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
V2ViSURMLyNlcy11bnNpZ25lZC1sb25nCi11aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtN
YXhVSW50MzIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBr
SlNNYXhJbnRlZ2VyKTsKLX0KLQotdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heElu
dGVnZXIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0
ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01h
eEludGVnZXIpKTsKLX0KLQotdWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2
NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVn
ZXIpKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcK
LWludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFu
ZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0g
ICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAg
IHJldHVybiBuOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2ln
bmVkLWxvbmctbG9uZwotdWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAg
ICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVz
IG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50
ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZUlu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3RyaW5n
cy5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydFN0cmluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgorI2luY2x1
ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
KyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENvbnZlcnNp
b24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9
OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3BlcmF0b3Io
KShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisgICAgewor
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0Jiwg
RXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlv
blRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwg
ZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGlj
dGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRF
bnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJv
d2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7Cisg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30K
KworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4
Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKworLy8gU3Bl
Y2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9u
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9u
VG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wg
bmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0IEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZl
cnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQor
eworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQoreworICAgIHJl
dHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VM
WSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0
YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9u
KCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFs
dWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
dmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0
ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6
SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ry
b25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdl
dCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4g
eworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxlQ29udmVy
c2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURM
VHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+
IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8
VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IE51
bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAorICAgIC8v
IDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElE
TCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25l
ZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0
aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxd
LCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1ZSBudWxs
LgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8KKyAgICAv
LyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRo
ZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVyd2lzZSwg
cmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhl
IGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9u
KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVs
bGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExO
dWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNH
bG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxs
VmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFi
bGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxh
YmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9
Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7CisgICAg
c3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChz
dGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xl
YW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigm
c3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJv
b2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFycmF5QnVm
ZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNB
cnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1
ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRlPD4gc3Ry
dWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewor
ICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7CisgICAgdXNp
bmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OworfTsKKwor
Ly8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1
Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVm
UHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBXcmFwcGVy
VHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNs
YXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRF
eGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3Jh
cHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAg
ICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmpl
Y3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2Fz
dDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYo
Y29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVy
biBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVm
KGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFu
Z2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3RhdGljIHVp
bnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9V
SW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50OENs
YW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDgoc3Rh
dGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50
YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0
PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1aW50MTZf
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQx
NkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFt
cChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0
ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRT
aG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xh
bXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQz
Migmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsK
KyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMy
KCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
c2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7
CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJ
bnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisgICAgc3Rh
dGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
bnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZs
b2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0aWMgaW5s
aW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3Vi
bGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAg
ICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAg
fQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAg
IGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAoVU5M
SUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0
ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4geworICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5cGUgPSB0
eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlh
VGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExE
T01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3Ry
aW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3Ry
aW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0
cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgewor
ICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmco
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
U3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZT
dHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmco
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNT
dHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9i
amVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0
aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlv
blRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKKwor
bmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBz
dHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OworCisgICAg
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJuVHlwZSBy
ZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBb
JnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVy
dGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1
ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5n
UG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBu
dW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBh
cyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3Ry
dWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252
ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5n
IFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisg
ICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6Omlz
SlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVy
Ojpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9i
YWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgp
KQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRl
LCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3Ro
KCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFy
ZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGlu
Z1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwor
CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHko
KS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDAp
OworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGlu
ZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hh
cGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIo
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3Vi
bGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXkt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1
ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgU2Vx
dWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6
OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0
ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNB
cnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlz
QXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2Vy
dmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSBy
aWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXkt
PmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAg
aWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMo
KVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAg
ICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9
IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFs
dWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOworICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRW
YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0
ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252
ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0
PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
RmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
dGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3Vi
bGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29u
c3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQg
OiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhl
YywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9i
YWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVj
dEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2UgRGV0YWls
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVjdCBJZGVu
dGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZl
cnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRl
LCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIEtl
eVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgVmFsdWVU
eXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIExldCByZXN1bHQg
YmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAvLyAyLiBJ
ZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAgICAgICBp
ZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEg
VHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
Ojphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAg
IAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgor
ICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFt
ZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2Jq
ZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVhdCwgZm9y
IGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBmb3IgKGF1
dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dl
dE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9y
IGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3Qt
PmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7CisgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICBp
ZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFi
bGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogRG8gd2Ug
bmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5k
bGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPworCisg
ICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2Ny
aXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5
IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAgICAgICAg
ICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252
ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8g
R2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0
KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUg
Y29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAgICAgYXV0
byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEg
a2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAgICAgICAg
ICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEg
bWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpT
Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgeworICAgICAg
ICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCByZXN1bHQg
YmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRvIHJlc3Vs
dCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAgICAvLyAy
LiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAgICAgIGZv
ciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAvLyAxLiBM
ZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgorICAgICAg
ICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUg
a2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgor
CisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4g
RUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3Rh
dGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAgICAgLy8g
My4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNW
YWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwg
SlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFs
dWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
K307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5
PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25h
cnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252
ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgor
ICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgewor
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24o
KSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFj
a0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFp
bDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBpbnRl
cmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENh
bGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZh
Y2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlv
blRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0
ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVk
KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFVu
aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9v
bCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5U
eXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwg
ZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9u
dDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFs
RnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpm
cm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBz
dHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAgIHVzaW5n
IHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wg
Y29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29u
ZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Cisg
ICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgdXNp
bmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJl
cjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVt
ZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmlj
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExV
bmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJp
Y1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1c2luZyBT
dHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29m
PElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVl
OworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9m
U3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0
cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNpbmcgU2Vx
dWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxi
cmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVu
Y2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOworICAgIHN0
YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5j
ZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElE
TFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2Vx
dWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAgdXNpbmcg
RnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96
ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAg
fHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZy
b3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3plbkFycmF5
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96
ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKKyAg
ICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdh
bmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09
IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRp
dGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47CisKKyAg
ICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExS
ZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOworICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3Jk
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVy
T2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZy
b250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNv
cmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4g
SWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwg
b3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6Omlz
X3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNOdWxs
VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5p
b24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZs
YXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZp
bmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBl
KSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAg
ICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwg
dGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5
IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFy
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3Jk
IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAgICAgICAv
LyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxl
bWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3Qs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2Jq
ZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0
IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJ
bnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFj
aDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICAgICAg
aWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3Zl
Q1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAg
ICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0
aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6
UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOworCisgICAg
ICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJu
VmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOworICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCisK
KyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgorICAgICAg
ICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7
CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBj
b2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhh
dCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMg
YSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEu
IExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVm
aW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4g
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5
cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVy
YXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVu
IGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0
IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAg
ICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVk
LCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4K
KyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0g
bnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICho
YXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRl
cmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBh
IGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFy
eVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCisgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxD
b252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFj
ayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVl
IHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42
KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEu
IElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVh
blR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBi
cmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7CisgICAg
ICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJZiBWIGlz
IGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBW
IHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmlj
VHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAg
ICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1l
dGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVt
ZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCisgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5
cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5n
IFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJy
b3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1
cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExV
bmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0
OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwor
CisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0
cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25U
eXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgo
KTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Cisg
ICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKKyAg
ICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRl
Y2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBp
bmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAgICAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRl
LCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7CisgICAgICAg
IHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4g
OiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0
VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+
IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRl
LCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
UmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRl
c2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlz
T2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAoIWxpc3Rl
bmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgCisg
ICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRo
TlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisgICAg
dXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7Cisg
ICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBw
ZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VM
WSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQ
dHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJL
ZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0
ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VCR0wpCisK
Ky8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdl
YkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1ZhbHVlKHN0
YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKworLy8gTUFS
SzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9ucworCitu
YW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAgdXNpbmcg
SXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0
IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAgdXNpbmcg
SXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29udmVydGVy
PElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAgICAgIHVz
aW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46Okl0ZW07
CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAgICBzdHJ1
Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAgICAgICAg
ICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsKKyAgICB9
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6OlZhcmlh
ZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1lbnRzKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6ZV90IGxl
bmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+IGxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBlbmFtZSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0OworICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAoIXZhbHVl
KQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
eyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRTdHJpbmdzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0U3Ry
aW5ncy5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRTdHJpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE4NzYgKzI1LDg0IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0jaW5jbHVkZSAi
SURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgogI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0
aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1lbnVtIGNsYXNz
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBD
bGFtcCB9OwogZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1h
bCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwogCi1zdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51
bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8
VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVu
dW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci19CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKIHsKICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRo
cm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNl
cHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVu
dGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9y
IElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpK
U1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+Ojpu
ZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRz
R2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4g
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0
cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxz
ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0
b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUm
JiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0
ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2
YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAg
ICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4
Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252
ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlv
blR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0g
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
SlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlND
OjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQotCi1uYW1lc3Bh
Y2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBO
dWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4g
Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7
Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJu
VHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25U
eXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwg
YW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAg
ICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBp
cyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQg
d2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxl
IHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9URTogSGFuZGxl
ZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBv
ciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBu
dWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGlu
ZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7
Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
c3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dl
cikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVm
YXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJl
dHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93
ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBJbXBsZW1l
bnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxU
Pjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCi0g
ICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6
OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwot
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNy
ZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUp
KQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0Nv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVG
cm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBO
dWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxs
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVj
dCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4gewotICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZp
ZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6
SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1w
bGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+PjsKLX07CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0
cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmlu
ZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIAogLy8g
TUFSSzogLQotLy8gTUFSSzogSW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdy
YXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFw
cGVyQ2xhc3M7CisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQogICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJldHVy
blR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIGlmIChjb25maWd1
cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5
U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5n
KCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwogICAgIH0KIH07
CiAKLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Ci10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4m
IHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExET01TdHJpbmc+IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExC
eXRlPiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAg
ICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURM
Qnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29u
dmVydGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExT
aG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9y
dD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5z
aWduZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKICAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKIAotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwogICAgIH0KIH07CiAK
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5
dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9J
bnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNs
YW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50
MzIoJnN0YXRlKTsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
VG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CiAgICAgfQogfTsKIAotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExM
b25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IGZhbHNlOwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0
cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKIAotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgICAg
IHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwogICAgIH0KIH07
CiAKLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5n
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigm
c3RhdGUpOworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAg
ICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VT
VlN0cmluZyhzdGF0ZSwgdmFsdWUpOwogICAgIH0KIH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEpT
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CiAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsK
ICAgICB9CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2NF90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRv
SW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50NjRD
bGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDY0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZ0xvbmc6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWludDY0X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VJbnQzMigp
KQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9V
SW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJ
bnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0aW5nIHBvaW50
IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4gOiBEZWZhdWx0
Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3VibGUgbnVt
YmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikp
KQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1i
ZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRmxvYXQ+IHsK
LSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERvdWJsZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBkb3Vi
bGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51
bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
SlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICBzdGF0aWMg
aW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVzdHJpY3RlZERv
dWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0K
LQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERP
TVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGVTdHJp
bmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0g
ICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVTVlN0
cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJhdGlv
biA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmlu
ZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwot
ICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3QgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkK
LSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNP
YmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwot
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2VxdWVuY2VDb252
ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVuYW1lIElETFR5
cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2JqZWN0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGZvckVh
Y2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoKnN0
YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gU3Bl
Y2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBvbmx5
IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJRExMb25nLiBU
byBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFkZCBhbiBvdmVy
bG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8vIHRha2VzIGFu
IEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMuCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVlbmNlQ29udmVy
dGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0
KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0
b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHko
bGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0
aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5
cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGlu
Z1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNJbnQzMigp
W2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFsdWUgfHwgaW5k
ZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXNE
b3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZG91YmxlVmFs
dWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzY29w
ZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4
KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAg
IHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlw
ZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVy
OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAg
ICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAg
ICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVy
dGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5n
dGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owot
ICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8K
LSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6Oklu
ZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6Oklu
ZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9
IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleFZh
bHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVk
VmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+
Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0g
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0gICAgICAgIHVz
aW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9u
Zz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBz
dHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OlJldHVy
blR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+IHsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91
YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXF1ZW5jZTxU
Pj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7Ci0gICAgICAg
IHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0
LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAg
ICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZn
bG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RDb25zdHJ1Y3Rv
ckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7Ci0KLSAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmluZz4gewotICAg
ICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVu
dGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
VG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0cmluZz4gewot
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAgICB9
Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IENv
bnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExSZWNvcmQ8Sywg
Vj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3JkPEssIFY+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1lIEs6OkltcGxl
bWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBWOjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBv
ZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5kZWZpbmVkIG9y
IE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIDMuIElm
IFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAK
LSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQuIExldCBrZXlz
IGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJvcGVydHlOYW1l
QXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7Ci0gICAgICAg
IG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5cywgSlNDOjpF
bnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtleSBvZiBrZXlz
IGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgewotICAgICAg
ICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLgotICAg
ICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAgICAgICAgICAg
IGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3JpcHRvcikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYgZGVzYyBpcyBu
b3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZvciBlbnVtZXJh
YmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1bHQKLSAgICAg
ICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICghZGVzY3JpcHRv
ci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJ
REwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRLZXkgPSBEZXRh
aWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAgICAgICAgICAg
ICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVl
IG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252ZXJ0ZXI8
Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQgaXRzIHZh
bHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBjYW4gaGFw
cGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyA1
LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwgdHlwZWRW
YWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0eXBlZFZh
bHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gNi4gUmV0dXJu
IHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
LSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0ZSglT2JqZWN0
UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
JnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVhY2ggbWFwcGlu
ZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBh
aXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkgY29udmVydGVk
IHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0aGlzIHN0ZXAg
aXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAgICAgICAgIC8v
IGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8vIDIuIExldCBl
c1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAg
ICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBrZXlWYWx1
ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBiZSAhIENyZWF0
ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAgICAgIGJvb2wg
Y3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDQu
IEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjcmVh
dGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVybiByZXN1bHQu
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+
IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGljdGlv
bmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFyeSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRW51bWVy
YXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAg
ICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxUPihzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51bWVy
YXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENh
bGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
ciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAgICBleGNlcHRp
b25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0
KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBz
dGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAg
ICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0g
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoSlND
Ojphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3Qg
VSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVm
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAg
fQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1Y3QgQ29uZGl0
aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgdHJ1ZT4gewot
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLX07Ci0KLW5h
bWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsK
LSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExp
c3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0gICAgfTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRp
b25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRp
dGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAg
IHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVu
YW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBl
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXpl
PE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1l
cmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVy
aWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJp
Y1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9y
IElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmln
YW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUg
Y2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcg
U3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3Ry
aW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxT
ZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVl
bmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2Vx
dWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJp
Z2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJp
Z2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxG
cm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAg
ICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxp
c3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09
IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEg
ZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwot
ICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlw
ZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpz
aXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJl
Y29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAg
dXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1Jl
Y29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAo
bnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVy
T2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2lu
ZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRl
cmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRl
cyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJu
IHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUg
PSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpf
MT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBm
bGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RF
OiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAg
ICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhh
c0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBp
ZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBp
ZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
UmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBw
bGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRl
cyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElE
TCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8g
ICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAg
ICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBp
ZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2
YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1
ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0o
YXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0
eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAg
IHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZh
bHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVt
ZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAg
ICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVy
blZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBh
bnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpT
Q2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAg
ICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhl
IHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0
IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ug
b2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBl
cyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
SXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
U2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2Yg
R2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNy
ZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkg
b2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMg
IT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9k
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0
aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmICho
YXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMg
aW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Jl
Y29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNv
cmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxi
YWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVw
IDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBv
YmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFu
IHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29s
ZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgot
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBl
TGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAg
ICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xl
YW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFy
YW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNC
b29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0g
ICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0g
ICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1l
cmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElm
IHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3Ry
aW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAg
ICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0
cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4K
LSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAg
IGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJv
b2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwot
Ci0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9u
PFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5
cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRp
b25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJy
aWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRf
c2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAg
ICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9u
YWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8
U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVu
YW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBl
OwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pT
PGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8
STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAg
ICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVl
KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0
ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3Rh
dGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91
YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsK
LSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09O
PiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lm
eSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpT
T05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4g
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxP
YmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlz
dGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8g
bGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29y
bGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVy
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNp
bmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
ID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0g
ICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAg
ZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0Owot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwot
ICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURM
V2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFu
eT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUp
OwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZv
ciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFz
ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRp
Y0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElE
TEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFs
PEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlh
ZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVy
ID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAg
c2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5l
cj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJl
c3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXpl
X3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3Vu
dCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBz
dGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8
SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJ
bmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZh
cmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRB
cmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBp
LCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQp
IH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxOTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJCdWZmZXJTb3VyY2UuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiSURMVHlwZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9i
amVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBDb252ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRh
dGlvbgordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFz
cyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwg
Q2xhbXAgfTsKK2VudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3Jt
YWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25U
aHJvd2VyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKQorICAgIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3Qm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwg
SlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXpl
ZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVu
dW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFs
PFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRF
bnVtZXJhdGlvblZhbHVlcygpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5h
bWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUg
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4
Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhj
ZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVy
PFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93
ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1l
bnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxP
YmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8VT4mJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6
SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVk
c0dsb2JhbE9iamVjdD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwg
dHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxV
Pih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFs
c2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQoreworICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUs
IGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4m
JiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Cisg
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4g
dG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYg
KFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNl
cHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2Jh
bE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVh
dGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNO
ZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYg
dmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAg
ICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOworfQorCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29u
dmVydGVyIHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRp
b25UeXBlOworfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0
IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNw
YWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3Qg
TnVsbGFibGVDb252ZXJzaW9uVHlwZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
IAorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29u
dmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisg
ICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4g
eworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVy
blR5cGU7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7Cisg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9u
VHlwZTxUPjo6VHlwZTsKKyAgICAKKyAgICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3Qs
IGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisg
ICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUg
aXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVk
IHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJs
ZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUgbnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRs
ZWQgZWxzZXdoZXJlLgorICAgIC8vCisgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwg
b3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUg
bnVsbC4KKyAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3Qp
OworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAg
ICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpu
dWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
RXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0
aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1
ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
dGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93
ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAg
IHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICBy
ZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlw
ZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzU3RhdGU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZl
cnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZh
bHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVl
RnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzog
TnVsbCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVs
bD4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBCb29sZWFuIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVl
KTsKKyAgICB9Cit9OworCisvLyBBcnJheUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1
c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFw
cGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJW
aWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PjsKK307CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVt
cGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBw
ZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNp
bmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5Vmll
dzxBZGFwdG9yPj47Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5
cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJl
dHVyblR5cGU7CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBl
IG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKCFvYmplY3QpKQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOworICAgICAgICByZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBE
ZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNv
bnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVm
KGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAu
Z2V0KCk7IH0KKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4g
eworICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0b0ludDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6
OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExPY3RldD4geworICAgIHN0YXRpYyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgor
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZh
bHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVk
U2hvcnQ+IHsKKyAgICBzdGF0aWMgdWludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMg
aW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJl
cik7CisgICAgfQorCisgICAgc3RhdGljIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVp
bnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQz
MkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRv
VUludDMyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZh
dWx0Q29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2
NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1w
KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExM
b25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisg
ICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRv
VUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2
NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5zaWduZWRMb25nTG9uZz4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlw
ZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIp
CisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisg
ICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJp
Y3RlZEZsb2F0PiB7CisgICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxv
YXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0
YXRlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmlj
dGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBu
dW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVy
KSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikp
KQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEb3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91Ymxl
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsK
KwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxp
bmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3Vi
bGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91Ymxl
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisg
ICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IFN0cmluZyB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3Ry
aW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmlu
ZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJp
bmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9u
ID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5n
ICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0Nv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYg
dmFsdWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYm
IHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAg
ICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExP
YmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVs
dEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAg
ICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4g
eyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRl
ciB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6
SW1wbGVtZW50YXRpb25UeXBlPjsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaElu
SXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUs
IGpzVmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFs
aXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1w
bGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFk
ZAorICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2Fk
IG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhl
Y1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIg
eworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVy
dGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKwor
ICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwor
ICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclBy
b3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2Vu
ZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBl
IHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5n
dGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24g
dG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgp
ICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlw
ZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGlu
ZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVy
PElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChp
bmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0u
Z2V0KCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZh
bHVlLmlzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJs
ZSgpW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBk
b3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0
YXRlLCBpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIElETFR5cGU+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNp
bmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsK
KyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJl
dHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAg
ICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdl
bmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlm
ICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmRO
b25PYnNlcnZhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6
OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9
IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhp
bmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhp
bmdTaGFwZU1hc2s7CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250
aWd1b3VzU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUg
PSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXRE
aXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAg
ICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6
UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRG
bG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7
CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
U2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4m
IHZlY3RvcikKKyAgICB7CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsK
KyAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5h
cHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxp
c3QpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4g
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEZyb3plbkFycmF5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNp
dHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxp
c3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxp
c3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAg
IGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2Jh
bE9iamVjdCwgbGlzdCk7CisgICAgICAgIHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJl
ZXplKCZleGVjLCBhcnJheSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVj
b3JkIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
U3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRp
ZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXIuc3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJp
bmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYg
aWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5
dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAg
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAg
ICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4g
eworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxl
bWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50
YXRpb25UeXBlOworICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0
aW9uVHlwZTsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJl
Y29yZDxLLCBWPi4KKyAgICAgICAgLy8gMi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVs
bCwgcmV0dXJuIHJlc3VsdC4KKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlw
ZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1
ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAg
ICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUg
PyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJh
eSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1l
cmF0aW9uTW9kZSgpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4g
TGlzdCBvcmRlcjoKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAg
ICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAg
ICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9v
bCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0
YXRlLCBrZXksIGRlc2NyaXB0b3IpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgICAgICAgICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1
bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUg
LyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAg
ICAgLy8gZW51bWVyYXRpb24gbW9kZT8KKworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZh
bHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAg
ICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2
YWx1ZSBvZiB0eXBlIEsuCisgICAgICAgICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6
SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAg
ICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAg
IGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8v
IDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2Yg
dHlwZSBWLgorICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6
Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
NC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUg
dG8gdHlwZWRWYWx1ZS4KKyAgICAgICAgICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4g
d2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90
aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVl
KS4KKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUg
fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVz
dWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE1hcFR5cGU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
TWFwVHlwZSYgbWFwKQorICAgIHsKKyAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAg
IAorICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90
b3R5cGUlKS4KKyAgICAgICAgYXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3Rh
dGUpOworICAgICAgICAKKyAgICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChr
ZXksIHZhbHVlKSBpbiBEOgorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6
IG1hcCkgeworICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8g
YW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBu
b3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4g
SWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFs
dWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAg
ICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFp
ci52YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0
YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVh
dGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNz
ZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQs
IGNyZWF0ZWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBE
aWN0aW9uYXJ5IHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewor
ICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5
PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBk
aWN0aW9uYXJ5KTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlv
biB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVy
YXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0
YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1
ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBleGVjLCBUIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlv
blRvSlMoZXhlYywgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENh
bGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJh
Y2tGdW5jdGlvbjxUPj4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0g
RXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFs
dWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBK
U0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFz
T2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFs
dWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9
OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25h
bENvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4K
K3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5U
eXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0
aW9uYWw8UmV0dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNw
YWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+
CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBM
aXN0PgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAg
ICAgICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwg
ZmFsc2U+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFs
RnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9u
Pjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bmlvbjxULi4uPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNp
bmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUg
VHlwZTo6VHlwZUxpc3Q7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6
OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExOdW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBudW1iZXJPZk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVt
ZXJpY1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNU
eXBlcyA9PSAwIHx8IG51bWJlck9mTnVtZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIG51bWVyaWMgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5
cGUgPSBDb25kaXRpb25hbEZyb250PE51bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlw
ZXMgIT0gMD47CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURM
RW51bWVyYXRpb248VD4uCisgICAgdXNpbmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFzZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6
OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9m
U3RyaW5nVHlwZXMgPT0gMCB8fCBudW1iZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4g
YmUgMCBvciAxIHN0cmluZyB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJp
bmdUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdU
eXBlcyAhPSAwPjsKKworICAgIHVzaW5nIFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVuY2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVl
bmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VU
eXBlcyA9PSAwIHx8IG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAg
b3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5j
ZVR5cGUgPSBDb25kaXRpb25hbEZyb250PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVu
Y2VUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5k
OjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5k
OjpzaXplPEZyb3plbkFycmF5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlv
bi4iKTsKKyAgICB1c2luZyBGcm96ZW5BcnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3pl
bkFycmF5VHlwZUxpc3QsIG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVz
aW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExE
aWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBicmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8
fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0
aW9uYXJ5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAg
dXNpbmcgRGljdGlvbmFyeVR5cGUgPSBDb25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlz
dCwgaGFzRGljdGlvbmFyeVR5cGU+OworCisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8
UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3Jk
VHlwZXMgPT0gMCB8fCBudW1iZXJPZlJlY29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2lu
ZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3Jk
VHlwZT47CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRp
Y3Rpb25hcnlUeXBlcyArIG51bWJlck9mUmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIElu
dGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFj
ZTxicmlnYW5kOjpfMT4+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEg
bnVsbGFibGUgdHlwZSBhbmQgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSBudWxsLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJy
aWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46
OnZhbHVlOworICAgICAgICBpZiAoaGFzTnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8
V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IElETE51bGwsIGhhc051bGxUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0
ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhlIHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVu
aW9uIGlzIGV4cGVjdGVkIHRvIGJlIHByZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAg
Ly8gMy4gSWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGlj
dGlvbmFyeVR5cGUgfHwgaGFzUmVjb3JkVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29u
dmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmICho
YXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
RGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9m
IGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmICho
YXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNv
cmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRm
b3JtIG9iamVjdCwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFu
IGludGVyZmFjZSB0eXBlIHRoYXQgViBpbXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZh
bHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAg
Mi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRo
YXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChi
cmlnYW5kOjphbnk8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVl
KSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOwor
ICAgICAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRv
JiYgdHlwZSkgeworICAgICAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUp
Pjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUg
PSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNp
bmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNp
bmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3
VHlwZT46OldyYXBwZXJDbGFzczsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUg
PSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYg
KCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRh
dGlvblR5cGUoY2FzdGVkVmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBp
ZiAocmV0dXJuVmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFs
dWUudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEwLgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBr
aW5kIG9mIG9iamVjdCwgdGhlbjoKKyAgICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxs
KiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIG9wdGltaXplIHRoZSBmb2xsb3dpbmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFs
dWUgaXMgYW4gb2JqZWN0LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2Yg
R2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNy
ZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0
aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3RleHByIGJvb2wgaGFzU2VxdWVuY2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9
IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0
ZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgUmV0dXJuVHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVy
YXRvcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6
Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1
ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAy
LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZyb3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRN
ZXRob2QoViwgQEBpdGVyYXRvcikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4g
UmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAz
LiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRp
bmcgYQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0
aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRob2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc0Zyb3plbkFycmF5VHlwZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAw
OworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRl
cmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJv
emVuQXJyYXlUeXBlLCBoYXNGcm96ZW5BcnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAv
LyAgICAgMy4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcg
ViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Rp
Y3Rpb25hcnlUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxX
VEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwg
RGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rpb25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
LnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNs
dWRlcyBhIHJlY29yZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byB0aGF0IHJlY29yZCB0eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3Jk
VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5
cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sg
aW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRv
IHRoYXQgaW50ZXJmYWNlIHR5cGUuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3IgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIu
NSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVj
dCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBv
YmplY3QgVi4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgMTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFs
dWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4s
IHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc0Jvb2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0
LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVhbiwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAg
IGlmIChoYXNCb29sZWFuVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigp
KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0
ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xl
YW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAvLyAxMy4gSWYgViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAg
ICAgY29uc3RleHByIGJvb2wgaGFzTnVtZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNU
eXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdU
eXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAg
IGlmIChoYXNTdHJpbmdUeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5n
VHlwZSwgaGFzU3RyaW5nVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKwor
ICAgICAgICAvLyAxNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAg
ICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBO
dW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUo
KSk7CisKKyAgICAgICAgLy8gMTYuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYg
KGhhc0Jvb2xlYW5UeXBlKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNr
TW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVh
biwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAg
ICAgICAgLy8gMTcuIFRocm93IGEgVHlwZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4u
Lj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxp
c3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5
cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2Fu
ZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXpl
PEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAg
IGF1dG8gaW5kZXggPSB2YXJpYW50LmluZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxK
U0M6OkpTVmFsdWU+IHJldHVyblZhbHVlOworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1
ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUg
V1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Cisg
ICAgICAgICAgICBpZiAoSTo6dmFsdWUgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIXJldHVyblZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJp
Z2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2
YWx1ZT4odmFyaWFudCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBB
U1NFUlQocmV0dXJuVmFsdWUpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7
CisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwg
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERh
dGU+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsK
KyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZz
dGF0ZSwgdmFsdWUsIDApOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBh
cnNlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFs
dWU8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVj
dCkgOiBKU0M6OmpzTnVsbCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2
ZW50IExpc3RlbmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5l
cjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0
ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgm
c3RhdGUpKTsKKyAgICAgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBS
ZXR1cm5UeXBlID0gUmVmUHRyPFQ+OworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwg
dmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAg
fQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRo
TlNSZXNvbHZlcjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5l
d2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9
Cit9OworCisjaWYgRU5BQkxFKFdFQkdMKQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJH
TEFueSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Cisg
ICAgfQorfTsKKworI2VuZGlmCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZh
cmlhZGljIHRhaWwgY29udmVydGlvbnMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZSB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAg
ICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50
ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVzaW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFQ+OworCisgICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRl
bT4oKnJlc3VsdCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRl
ckJhc2U8SURMVHlwZT4geworICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBW
ZWN0b3I8SXRlbT47CisKKyAgICAgICAgc3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXpl
X3QgYXJndW1lbnRJbmRleDsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBh
cmd1bWVudHM7CisgICAgICAgIH07CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0
IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBz
dGFydEluZGV4KQoreworICAgIHNpemVfdCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7
CisgICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6
bnVsbG9wdCB9OworCisgICAgdHlwZW5hbWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExU
eXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGggLSBzdGFydEluZGV4KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFk
aWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3Vt
ZW50KGkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0
ZDo6bnVsbG9wdCB9OworICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZh
bHVlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0VW5pb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSwxNDE1ICsyNSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZl
clNvdXJjZS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJ
RExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5l
cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorI2luY2x1ZGUgIkpTRE9NQ29u
dmVydEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBDb252ZXJzaW9uIGZyb20g
SlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjsKLQotZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBO
b3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKLWVudW0gY2xhc3MgU3RyaW5nQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgfTsKLQotc3Ry
dWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKLSAgICB2b2lkIG9wZXJhdG9yKCkoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotICAgIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29u
dmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYsIEV4Y2VwdGlv
blRocm93ZXImJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGRpY3Rpb25h
cnkgY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydERpY3Rpb25hcnko
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RW51bWVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNv
bmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGNvbmZpZ3VyYXRpb24pOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhj
ZXB0aW9uVGhyb3dlcikpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotewotICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLS8vIENv
bnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgVSYm
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci0KLS8vIFNwZWNpYWxpemVk
IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoSlND
OjpFeGVjU3RhdGUmLCBUKTsKLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBib29sIG5lZWRzU3Rh
dGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KLXN0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyPFQsIHRydWUsIHRydWU+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0Nv
bnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBV
JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zl
cmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2Fk
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
QW55IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFueT4gOiBEZWZhdWx0
Q29udmVydGVyPElETEFueT4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBKU0M6OkpTVmFsdWU7
Ci0gICAgCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0K
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExBbnk+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IE51
bGxhYmxlIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPElETFR5cGU+OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6UmV0
dXJuVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPElETEFueT4gewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29u
dmVydGVyPElETEFueT46OlJldHVyblR5cGU7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZhdWx0Q29udmVydGVy
PElETE51bGxhYmxlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFp
bDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKLSAgICAKLSAgICAvLyAxLiBJZiBU
eXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBhbiBJREwgdmFsdWUg
aXMgYmVpbmcgcGVyZm9ybWVkCi0gICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNzaWduZWQgdG8gYW4g
YXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBmdW5jdGlvbgotICAg
IC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNOdWxsXSwgdGhlbiBy
ZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/Ci0gICAgLy8gdmFsdWUgbnVsbC4KLSAgICAv
LwotICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgotICAgIC8vCi0gICAgLy8gMi4gT3Ro
ZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIG51
bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KLSAgICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9yIHRoZSBpbm5lciBJ
REwgdHlwZSBULgotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwot
ICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBU
OjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHRoaXNPYmplY3QpOwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qp
OwotICAgIH0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAg
fQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93
ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNl
cHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikK
LSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRo
cm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
RXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETE51bGxhYmxlPFQ+
PiB7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8
VD46OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2Jq
ZWN0OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4g
SlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVl
KSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1
ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYg
KFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9i
amVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogTnVsbCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBz
dGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoc3RkOjpudWxs
cHRyX3QpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBCb29sZWFuIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCb29sZWFuPiB7Ci0g
ICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xlYW4oJnN0YXRlKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCb29sZWFuPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNCb29sZWFuKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBBcnJheUJ1ZmZlciBzdXBw
b3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6
QXJyYXlCdWZmZXI+IHsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZm
ZXI7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJyYXlCdWZmZXIqOwot
fTsKLQotLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHsKLSAgICB1c2lu
ZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OwotICAgIHVzaW5nIFRvV3Jh
cHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKLX07Ci0KLS8vIFR5cGVk
IGFycmF5cyBzdXBwb3J0LgotdGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4gc3RydWN0IEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9y
Pj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZp
ZXc8QWRhcHRvcj47Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxKU0M6
OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBJbnRlcmZhY2UgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEludGVyZmFjZTxUPj4g
ewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7Ci0gICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBwZXJDbGFzczsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhy
b3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0s
IHZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhj
ZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAg
IH0KLX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5s
aW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCo+KHAp
OyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFQm
IHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyByZXR1cm4gcC5nZXQo
KTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBS
ZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLQotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJbnRl
Z2VyIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHN0YXRpYyBpbnQ4X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2N0
ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHN0YXRpYyB1aW50OF90IGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRp
b24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDhDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQ4KHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMT2N0ZXQ+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTaG9ydD4gewotICAg
IHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
b0ludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMU2hvcnQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAgICBzdGF0aWMgdWludDE2X3QgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50MTYoc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25l
ZFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkU2hvcnQ6Oklt
cGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElE
TExvbmc+IHsKLSAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Ci0gICAgfQotCi0gICAgc3RhdGljIGludDMyX3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQzMkNsYW1wKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvSW50MzIoJnN0YXRl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nPiB7
Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsK
LQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRM
b25nPiB7Ci0gICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Ci0gICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgc3Rh
dGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0g
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAg
ICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExv
bmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHN0
YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsK
LQotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7
Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLQotICAgIHN0YXRpYyBpbmxp
bmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6
aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7
Ci0gICAgfQotCi0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAg
ICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExGbG9hdDo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gOiBEZWZhdWx0
Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgc3RhdGljIGlubGluZSBmbG9h
dCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJl
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6
OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgc3RhdGlj
IGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLQotICAg
IHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUg
bnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVu
cmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJs
ZT4gewotICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51
bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotCi0gICAgLy8gQWRkIG92ZXJsb2FkIGZvciBNZWRpYVRpbWUuCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFN0cmluZyB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRE9NU3RyaW5n
PiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAg
ICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpU
cmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b1dURlN0cmluZygmc3Rh
dGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERPTVN0
cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsK
LSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAg
aWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0
TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3RyaW5nKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0
ZVN0cmluZz4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dp
dGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
ID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVh
dE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IGVtcHR5U3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3RyaW5nKHN0YXRlLCB2
YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVVNW
U3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IE9iamVjdCB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPYmplY3Q+IDog
RGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAg
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1ZSkgfTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBcnJheS1saWtlIHR5cGVzCi0KLW5hbWVzcGFj
ZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSBWZWN0
b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVj
dCoganNPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0Owot
ICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVjdCwgWyZyZXN1bHRd
KEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVkVmFsdWUpKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBlcwotICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9hdGluZ1BvaW50VHlw
ZXMgYW5kIElETExvbmcuIFRvIGFkZAotICAgIC8vIHN1cHBvcnQgZm9yIG1vcmUgbnVtZXJpYyB0
eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCB0aGF0
Ci0gICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3VibGUgYXMgaXRzIGFy
Z3VtZW50cy4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdW1l
cmljU2VxdWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0g
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93
U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXko
b2JqZWN0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpT
Qzo6YXNBcnJheShvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0
KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
KTsKLQotICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0g
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRy
eVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElz
IHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
YXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZl
cnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29u
dmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQzMlNoYXBlKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+
Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
aW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0ludDMyKCkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6RG91YmxlU2hhcGUp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFycmF5LT5idXR0ZXJm
bHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3Rk
Ojppc25hbihkb3VibGVWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5j
aGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJh
eS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5k
ZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
dW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAgICBpZiAo
IXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVj
dCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVj
dCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJyYXkob2Jq
ZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0FycmF5SXRl
cmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAgICAgUmV0
dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmlnaHQgZXhj
ZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5pbmRleGlu
Z1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlmIChpbmRl
eGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClbaV0uZ2V0
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6Ompz
VW5kZWZpbmVkKCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29u
dmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETExv
bmc+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
dGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD4gewotICAg
ICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETEZsb2F0Pjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsK
LSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZl
cnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVy
dGVyPElETERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2Vu
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+OjpSZXR1
cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERl
dGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rv
cjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2Vk
QXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9y
KQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVs
ZW1lbnQpKTsKLSAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51bGxw
dHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBE
ZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1h
cmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZl
Y3RvcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBlbGVtZW50KSk7Ci0gICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25zdHJ1Y3RBcnJheSgm
ZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgICAgIHJldHVybiBKU0M6
Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7Ci0gICAgfQotfTsKLQotLy8g
TUFSSzogLQotLy8gTUFSSzogUmVjb3JkIHR5cGUKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KLSAgICBzdHJ1Y3QgSWRlbnRpZmllckNv
bnZlcnRlcjsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURM
RE9NU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7
Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8
SURMVVNWU3RyaW5nPiB7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhzdGF0ZSwgaWRlbnRp
Zmllcik7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBl
bmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBJ
RExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBLZXlUeXBlID0g
dHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIFZhbHVlVHlwZSA9IHR5
cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgbmV3
IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KLSAgICAgICAgLy8gMi4gSWYgVHlwZShP
KSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAK
LSAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJv
ci4KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOwotICAgIAotICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAKLSAgICAg
ICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS4KLSAgICAgICAg
SlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0eU5hbWVNb2RlOjpT
dHJpbmdzKTsKLSAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCwgJnN0
YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAvLyA1LiBSZXBlYXQsIGZvciBlYWNoIGVs
ZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKLSAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBrZXlzKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9w
ZXJ0eV1dKGtleSkuCi0gICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciBkZXNjcmlw
dG9yOwotICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2JqZWN0LT5nZXRPd25Q
cm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwotICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgaWYgKCFkaWRH
ZXREZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAv
LyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMg
dHJ1ZToKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
Y2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMgaGFuZGxlZCBieSB0
aGUgZGVmYXVsdAotICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8KLQotICAgICAgICAg
ICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBkZXNjcmlwdG9yLmVu
dW1lcmFibGUoKSkgewotICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkg
Y29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCi0gICAgICAgICAgICAgICAgYXV0
byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6Y29udmVydChzdGF0
ZSwga2V5KTsKLQotICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBr
ZXkpLgotICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3QtPmdldCgmc3RhdGUs
IGtleSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LQotICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRl
ZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRW
YWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFkeSBhIGtleSBpbiBy
ZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KLSAgICAgICAgICAgICAgICAvLyBO
b3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0LgotICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3VsdCBhIG1hcHBpbmcg
KHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHsg
dHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExSZWNvcmQ8SywgVj4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
dHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+Ci0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQotICAgIHsKLSAgICAgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBMZXQgcmVzdWx0IGJlICEgT2Jq
ZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAgYXV0byByZXN1bHQgPSBjb25z
dHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAgICAgICAgLy8gMi4gUmVwZWF0
LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAgICAgLy8gMS4gTGV0IGVzS2V5
IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIC8v
IE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQgdGhlIGtleSB0byBi
ZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1ZS4KLQotICAgICAg
ICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIEVDTUFTY3Jp
cHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAgICAgICAgIC8vIDMuIExldCBj
cmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXksIGVzVmFsdWUpLgot
ICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBlc1ZhbHVlKTsKLQot
ICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCi0gICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
My4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBUOwotCi0gICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeTxUPihzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiBk
aWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5VG9KUyhz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExFbnVt
ZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydEVudW1l
cmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8v
IE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0aW9uKCkpIHsKLSAg
ICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gVDo6Y3Jl
YXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlv
bjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
Y29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6OmdldFB0
ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgaW50ZXJmYWNlIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0lu
dGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERl
dGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBl
Ci0KIHRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxl
ZD4KIHN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKIApAQCAtMTQ1NCwyMCArNTEsMjAgQEAg
c3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIAogfTsKIAogbmFtZXNwYWNl
IERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci0g
ICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0
PgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIHRydWU+Ci0gICAgewotICAgICAg
ICB1c2luZyB0eXBlID0gYnJpZ2FuZDo6ZnJvbnQ8TGlzdD47Ci0gICAgfTsKK3RlbXBsYXRlPHR5
cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgorc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CitzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0
cnVlPiB7CisgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgTGlzdD4KK3N0cnVjdCBDb25kaXRpb25hbEZyb250PExpc3QsIGZhbHNl
PiB7CisgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Cit9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
TGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0g
ICAgICAgIHVzaW5nIHR5cGUgPSB2b2lkOwotICAgIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IExpc3QsIGJvb2wgY29uZGl0aW9uPgpAQCAtMTY4NSwyMTYgKzI4Miw0IEBAIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0NvbnZlcnQKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBEYXRlIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERhdGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1B
Uks6IElETEpTT04gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNPTj4g
OiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlw
dFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+
PiB7Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFJlZlB0cjxUPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlLT5k
ZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBSZWZQdHI8VD47Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUudm0oKSk7Ci0KLSAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwgdGhp
c09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKLSAgICAgICAgaWYgKCFsaXN0
ZW5lcikKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIAot
ICAgICAgICByZXR1cm4gbGlzdGVuZXI7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExYUGF0
aE5TUmVzb2x2ZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotICAg
IHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFw
cGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
c3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogSURMSURCS2V5IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSURC
S2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFdFQkdMKQot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2Jh
bE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBX
ZWJHTEFueSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1ZShz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotI2VuZGlmCi0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMKLQot
bmFtZXNwYWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBz
dHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURM
VHlwZT4gCi0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICAgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOwotICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgc3RkOjpudWxsb3B0KTsKLQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgICAgIHVzaW5n
IEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OwotCi0gICAgICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgVmFyaWFk
aWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4gewotICAgICAgICB1
c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVt
OwotICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47Ci0KLSAgICAgICAgc3Ry
dWN0IFJlc3VsdCB7Ci0gICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKLSAgICAgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7Ci0gICAgICAgIH07Ci0gICAg
fTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpWYXJp
YWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50cyhK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQotewotICAgIHNpemVfdCBs
ZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7Ci0gICAgaWYgKHN0YXJ0SW5kZXggPiBsZW5n
dGgpCi0gICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OwotCi0gICAgdHlwZW5hbWUg
RGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OwotICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZUluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRWYXJpYWRpYy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFZh
cmlhZGljLmgJKHJldmlzaW9uIDIxMTU0OCkJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Db252ZXJ0Lmg6MjExNTQ4KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0VmFyaWFkaWMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgor
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJRExUeXBlcy5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENv
bnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyOworCitlbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OworZW51bSBjbGFzcyBT
dHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0
cmluZyB9OworCitzdHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgeworICAgIHZvaWQgb3Bl
cmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCisg
ICAgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICB9Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2Vy
PiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4
Y2VwdGlvblRocm93ZXImJik7CisKKy8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFNwZWNp
YWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNv
bnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCit7CisgICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRp
b25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRp
b25UaHJvd2VyKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Cit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKK30KKworLy8gQ29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBV
JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4m
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBVJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKKwor
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252
ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1l
cmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFQpOworCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgorc3RydWN0
IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4geworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUm
JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZh
bHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQorewor
ICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChV
TkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgeworICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Cit9OworCisvLyBNQVJL
OiAtCisvLyBNQVJLOiBBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
QW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IEpTQzo6SlNWYWx1ZTsKKyAgICAKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmdldCgpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElE
TEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAgfQorfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogTnVsbGFibGUgdHlwZQorCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBl
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCisgICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGUgeworICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFi
bGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZh
Y2U8VD4+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRl
cmZhY2U8VD4+OjpSZXR1cm5UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3Ry
dWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMQW55PiB7CisgICAgICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOworICAgIAor
ICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRv
IGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJmb3JtZWQKKyAgICAvLyBkdWUgdG8gViBiZWluZyBh
c3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNr
IGZ1bmN0aW9uCisgICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RB
c051bGxdLCB0aGVuIHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KKyAgICAvLyB2YWx1
ZSBudWxsLgorICAgIC8vCisgICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCisgICAgLy8K
KyAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0
dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgorICAgIC8vIDMuIE90aGVy
d2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBm
b3IgdGhlIGlubmVyIElETCB0eXBlIFQuCisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVj
dCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFs
dWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUs
IGdsb2JhbE9iamVjdCk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0
RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlv
blRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNl
cHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndh
cmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsK
KyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2Jh
bE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMTnVsbGFibGU8VD4+IHsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFt
ZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6
bmVlZHNHbG9iYWxPYmplY3Q7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoVDo6
aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Cisg
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9t
TnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7CisgICAg
fQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJv
bU51bGxhYmxlKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxsIHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7
CisgICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEJvb2xlYW4gdHlwZQorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9v
bGVhbigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETEJvb2xlYW4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOworICAgIH0KK307CisKKy8vIEFy
cmF5QnVmZmVyIHN1cHBvcnQuCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpT
Qzo6SlNBcnJheUJ1ZmZlcjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpB
cnJheUJ1ZmZlcio7Cit9OworCisvLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KK3RlbXBsYXRl
PD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmll
dz4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Cisg
ICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Owor
fTsKKworLy8gVHlwZWQgYXJyYXlzIHN1cHBvcnQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJy
YXlWaWV3PEFkYXB0b3I+PiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVy
aWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsKKyAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBl
ID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IEludGVyZmFjZSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
SW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKKyAgICB1c2luZyBX
cmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3Jh
cHBlckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXIm
JiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAg
SlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6
OnRvV3JhcHBlZCh2bSwgdmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCisg
ICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29u
c3RfY2FzdDxUKj4ocCk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRy
T3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7
IHJldHVybiBwLmdldCgpOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0
ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQorCit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IEludGVnZXIgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlPiB7CisgICAgc3RhdGljIGludDhfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZv
cmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7CisgICAgc3Rh
dGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1
cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9V
SW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUlu
dDgoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExPY3RldD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1w
bGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFNob3J0PiB7CisgICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
CisgICAgICAgICAgICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTaG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNo
b3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4geworICAgIHN0YXRpYyB1
aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0
b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50
MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQx
NihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5z
aWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChU
eXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMTG9uZz4geworICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVy
biB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0lu
dDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUu
dG9JbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETExvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVt
ZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBm
YWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxz
ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZExvbmc+IHsKKyAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsK
KyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlv
blR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisg
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xv
bmc+IHsKKyAgICBzdGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5h
c0ludDMyKCk7CisKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7CisgICAgdXNpbmcg
VHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdM
b25nPiB7CisgICAgc3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1
ZS5hc1VJbnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25n
PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4geworCisg
ICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGlmIChV
TkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAg
ICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5
cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZs
b2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICBzdGF0
aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAg
IHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRp
b25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKwor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+
IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAg
IGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93
Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7
CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5y
ZXN0cmljdGVkRG91YmxlPiB7CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gbnVtYmVyOworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsK
KworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICAvLyBBZGQgb3ZlcmxvYWQgZm9y
IE1lZGlhVGltZS4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUo
KSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU3RyaW5nIHR5cGVzCisKK3Rl
bXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExET01TdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
KQorICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
Qnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisg
ICAgeworICAgICAgICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVT
dHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBs
YXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQor
ICAgIHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZT
dHJpbmcoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogT2JqZWN0IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAg
ICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4
Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZh
bHVlKSB9OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFycmF5LWxpa2UgdHlw
ZXMKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4K
KyAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+Owor
CisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgUmV0dXJu
VHlwZSByZXN1bHQ7CisgICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2Jq
ZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0g
Q29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0
ZWRWYWx1ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5
cGVzCisgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZs
b2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCisgICAgLy8gc3VwcG9ydCBmb3Ig
bW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0IHRoYXQKKyAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRv
dWJsZSBhcyBpdHMgYXJndW1lbnRzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVy
aWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBl
OworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgICAgICAgICAgaWYgKCFK
U0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29u
dmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICBKU0M6OkpTQXJy
YXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoIWFycmF5
LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2
YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0
KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+
bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OworICAgICAgICAgICAg
aWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVN
YXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1No
YXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0
ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBw
ZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3Rh
dGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6Oklu
dDMyU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFz
SW50MzIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlND
OjpEb3VibGVTaGFwZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0g
YXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRl
cjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOworICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1
Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0g
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgIHRocm93
U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXko
b2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVy
dChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpT
Qzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0
KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0
KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisg
ICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmICghcmVzdWx0LnRy
eVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElz
IHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0g
YXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKKworICAgICAg
ICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgeworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRp
Z3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
KworICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhW
YWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXI8SURMTG9uZz4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOworCisgICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElE
TEZsb2F0PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3Ry
aWN0ZWRGbG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3Qg
U2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlw
ZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
TnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVl
bmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBl
ID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKwor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAg
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVs
ZW1lbnQgOiB2ZWN0b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGds
b2JhbE9iamVjdCwgZWxlbWVudCkpOworICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJh
eSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisK
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7Cisg
ICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVj
LCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNv
bnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICAg
ICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBSZWNvcmQgdHlwZQorCituYW1lc3BhY2Ug
RGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgorICAgIHN0cnVj
dCBJZGVudGlmaWVyQ29udmVydGVyOworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmll
ckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRp
Zmllcik7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRp
ZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5n
KHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVz
aW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcg
VmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8vIDEuIExldCBy
ZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgorICAgICAgICAv
LyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgorICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRo
cm93IGEgVHlwZUVycm9yLgorICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgCisgICAgICAgIFJldHVyblR5cGUgcmVzdWx0
OworICAgIAorICAgICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNd
XSgpLgorICAgICAgICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3Bl
cnR5TmFtZU1vZGU6OlN0cmluZ3MpOworICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFt
ZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOworICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIC8vIDUuIFJlcGVh
dCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgorICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8g
Ty5bW0dldE93blByb3BlcnR5XV0oa2V5KS4KKyAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNj
cmlwdG9yIGRlc2NyaXB0b3I7CisgICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBv
YmplY3QtPmdldE93blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7
CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAg
ICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3IpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0Vu
dW1lcmFibGVdXSBpcyB0cnVlOgorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhp
cyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0CisgICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2Rl
PworCisgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYm
IGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5
cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KKyAgICAg
ICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+
Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOworCisgICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVl
IGJlID8gR2V0KE8sIGtleSkuCisgICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZzdGF0ZSwga2V5KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUg
dmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCisgICAgICAgICAgICAg
ICAgYXV0byB0eXBlZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1
ZSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJl
YWR5IGEga2V5IGluIHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgorICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmpl
Y3QuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVz
dWx0IGEgbWFwcGluZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoeyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCisgICAgewor
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgCisgICAgICAgIC8vIDEuIExldCBy
ZXN1bHQgYmUgISBPYmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgorICAgICAgICBhdXRv
IHJlc3VsdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7CisgICAgICAgIAorICAgICAg
ICAvLyAyLiBSZXBlYXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6CisgICAg
ICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7CisgICAgICAgICAgICAv
LyAxLiBMZXQgZXNLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgor
ICAgICAgICAgICAgLy8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVl
ZCB0aGUga2V5IHRvIGJlCisgICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1Zh
bHVlLgorCisgICAgICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQg
dG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8
Vj4oc3RhdGUsIGdsb2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKKworICAgICAgICAg
ICAgLy8gMy4gTGV0IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tl
eSwgZXNWYWx1ZSkuCisgICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVj
dCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSks
IGVzVmFsdWUpOworCisgICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4K
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7CisgICAgICAgIH0K
KworICAgICAgICAvLyAzLiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IFQ7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0
aW9uYXJ5PFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFQmIGRpY3Rpb25hcnkpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERp
Y3Rpb25hcnlUb0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOworICAgIH0KK307
CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7CisgICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0RW51bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rp
b248VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJv
d2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoIXZhbHVlLmlzRnVu
Y3Rpb24oKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExD
YWxsYmFja0Z1bmN0aW9uPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pT
KERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndh
cmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBDYWxsYmFj
ayBpbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJ
bnRlcmZhY2U8VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dl
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFs
T2JqZWN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlD
cmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVk
KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1B
Uks6IFVuaW9uIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUg
VCwgYm9vbCBlbmFibGVkPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFQsIHRydWU+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxS
ZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVy
blR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgVCwgZmFsc2U+IHsKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9u
YWxGcm9udDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+CisgICAgc3RydWN0IENvbmRp
dGlvbmFsRnJvbnQ8TGlzdCwgdHJ1ZT4KKyAgICB7CisgICAgICAgIHVzaW5nIHR5cGUgPSBicmln
YW5kOjpmcm9udDxMaXN0PjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
KyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KKyAgICB7CisgICAgICAg
IHVzaW5nIHR5cGUgPSB2b2lkOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIExpc3Qs
IGJvb2wgY29uZGl0aW9uPgordXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFp
bDo6Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOworCit0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4u
Lj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKKyAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisg
ICAgdXNpbmcgTnVtZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lE
TE51bWJlcjxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mTnVtZXJpY1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsK
KyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZO
dW1lcmljVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8
TnVtZXJpY1R5cGVMaXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKKworICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KKyAgICB1
c2luZyBTdHJpbmdUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19i
YXNlX29mPElETFN0cmluZywgYnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBudW1iZXJPZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46
OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51
bWJlck9mU3RyaW5nVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVz
IGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZy
b250PFN0cmluZ1R5cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OworCisgICAgdXNp
bmcgU2VxdWVuY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1
ZW5jZTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9m
U2VxdWVuY2VUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwor
ICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZT
ZXF1ZW5jZVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGlu
IGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJv
bnQ8U2VxdWVuY2VUeXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OworCisgICAg
dXNpbmcgRnJvemVuQXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJ
RExGcm96ZW5BcnJheTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBl
TGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ID09IDAgfHwgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBv
ciAxIEZyb3plbkFycmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOworICAgIHVzaW5nIEZyb3pl
bkFycmF5VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzICE9IDA+OworCisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0
ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+
PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9
IGJyaWdhbmQ6OnNpemU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5
cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURM
VW5pb24uIik7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0g
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgIT0gMDsKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47
CisKKyAgICB1c2luZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExSZWNvcmQ8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZlJlY29yZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVl
OworICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9m
UmVjb3JkVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFu
IElETFVuaW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0g
bnVtYmVyT2ZSZWNvcmRUeXBlcyAhPSAwOworICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRp
b25hbEZyb250PFJlY29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKKworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51
bWJlck9mRnJvemVuQXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVy
T2ZSZWNvcmRUeXBlcykgPiAwOworCisgICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmln
YW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47CisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAg
Ly8gMS4gSWYgdGhlIHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlz
IG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCisgICAg
ICAgIGNvbnN0ZXhwciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBz
dGQ6OmlzX3NhbWU8SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmICho
YXNOdWxsVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRl
cj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIDIuIExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0
aGUgdW5pb24gdHlwZS4KKyAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUg
cHJlLWZsYXR0ZW50ZWQuCisgICAgICAgIAorICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3Ig
dW5kZWZpbmVkIHRoZW46CisgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNv
cmRUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkg
dHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0
aW9uYXJ5IHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGlj
dGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVj
b3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQg
cmVjb3JkIHR5cGUuCisgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgorICAg
ICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBW
IGltcGxlbWVudHMsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5j
ZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBv
YmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0
aGUgb2JqZWN0IFYuCisgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b2JqZWN0IGFuZCBzdGVwIDQuMikKKyAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwg
SXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKKyAgICAgICAgICAgIHN0ZDo6
b3B0aW9uYWw8UmV0dXJuVHlwZT4gcmV0dXJuVmFsdWU7CisgICAgICAgICAgICBicmlnYW5kOjpm
b3JfZWFjaDxJbnRlcmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6
UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOworICAgICAg
ICAgICAgICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxl
bWVudGF0aW9uVHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUg
VHlwZTo6UmF3VHlwZTsKKyAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwor
CisgICAgICAgICAgICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBw
ZWQodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cmV0dXJuVmFsdWUgPSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkp
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0g
MTAuCisKKyAgICAgICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgor
ICAgICAgICBpZiAoaGFzT2JqZWN0VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKSB7CisgICAgICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKKyAgICAgICAgICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxv
d2luZyBjb2RlIGJ5IG1ha2luZyB1c2UKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZh
Y3QgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBzZXF1ZW5jZSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAg
ICAgIDEuIExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRv
cikuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0
aG9kKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90
IHVuZGVmaW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1l
dGhvZC4gICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1
ZW5jZVR5cGUgPSBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc1NlcXVlbmNlVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBo
YXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENv
bmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VU
eXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEg
ZnJvemVuIGFycmF5IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAg
MS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2Qp
LgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5k
ZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgICAgICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1l
dGhvZC4KKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlU
eXBlID0gbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNGcm96ZW5BcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aGFzSXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3pl
bkFycmF5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNs
dWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0
eXBlLgorICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGlj
dGlvbmFyeVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUu
CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgNS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBj
YWxsYmFjayBpbnRlcmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgNi4gSWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURM
IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3Rl
cCAxMi42KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIDEyLiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8g
ICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
Qm9vbGVhblR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29s
ZWFuLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7
CisgICAgICAgICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDEzLiBJ
ZiBWIGlzIGEgTnVtYmVyIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNO
dW1lcmljVHlwZSA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsK
KyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNO
dW1iZXIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3Zl
UGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwg
aGFzTnVtZXJpY1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUu
CisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0
cmluZ1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKKyAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE1LiBJZiB0eXBl
cyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCisgICAgICAgIGlmIChoYXNOdW1lcmljVHlw
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmlj
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byBib29sZWFuLgorICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRp
b25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNy4gVGhyb3cgYSBU
eXBlRXJyb3IuCisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4gUmV0dXJuVHlwZSgpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4geworICAgIHVzaW5nIFR5cGUg
PSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5
cGVMaXN0OworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6Oklt
cGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdh
bmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6
dmFsdWU+OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50
YXRpb25UeXBlJiB2YXJpYW50KQorICAgIHsKKyAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQu
aW5kZXgoKTsKKworICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFs
dWU7CisgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUp
IHsKKyAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJl
bmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAgICAgIGlmIChJOjp2YWx1
ZSA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOworICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZS52YWx1ZSgpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IERhdGUgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
RGF0ZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgZG91YmxlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBqc0RhdGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogSURMSlNPTiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExK
U09OPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5
cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVk
U2NyaXB0VmFsdWU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFs
dWU8VD4+IHsKKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVDo6Y3JlYXRl
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgUmVmUHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFs
dWUtPmRlc2VyaWFsaXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7CisgICAgdXNpbmcgUmV0
dXJuVHlwZSA9IFJlZlB0cjxUPjsKKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS52bSgpKTsKKworICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVl
LCB0aGlzT2JqZWN0LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOworICAgICAgICBpZiAo
IWxpc3RlbmVyKQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Cisg
ICAgCisgICAgICAgIHJldHVybiBsaXN0ZW5lcjsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBYUGF0aE5TUmVzb2x2ZXIgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47
CisgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJU
cmFpdHM8VD46OldyYXBwZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAg
ICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9
IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGlmIChV
TkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJRExJREJLZXkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExJREJLZXk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoV0VC
R0wpCisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFdlYkdMQW55JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0VG9KU1Zh
bHVlKHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICB9Cit9OworCisjZW5kaWYKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogU3VwcG9ydCBmb3IgdmFyaWFkaWMgdGFpbCBjb252ZXJ0aW9u
cworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgor
ICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlIHsKKyAgICAgICAg
dXNpbmcgSXRlbSA9IHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
ICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBzdGQ6Om51bGxvcHQpOworCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShyZXN1
bHQpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
c3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExJbnRlcmZhY2U8VD4+IHsKKyAgICAgICAg
dXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8VD47CisKKyAgICAgICAgc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogcmVzdWx0ID0gQ29u
dmVydGVyPElETEludGVyZmFjZTxUPj46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpvcHRpb25hbDxJdGVtPigqcmVzdWx0KTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBW
YXJpYWRpY0NvbnZlcnRlciA6IFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPiB7CisgICAg
ICAgIHVzaW5nIEl0ZW0gPSB0eXBlbmFtZSBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT46
Okl0ZW07CisgICAgICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJdGVtPjsKKworICAgICAg
ICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgICAgIHNpemVfdCBhcmd1bWVudEluZGV4OworICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDxDb250YWluZXI+IGFyZ3VtZW50czsKKyAgICAgICAgfTsK
KyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiB0eXBlbmFtZSBEZXRhaWw6
OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpSZXN1bHQgY29udmVydFZhcmlhZGljQXJndW1l
bnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgc2l6ZV90IHN0YXJ0SW5kZXgpCit7CisgICAgc2l6
ZV90IGxlbmd0aCA9IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoc3RhcnRJbmRleCA+
IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgMCwgc3RkOjpudWxsb3B0IH07CisKKyAgICB0eXBl
bmFtZSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+OjpDb250YWluZXIgcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCAtIHN0YXJ0SW5kZXgp
OworCisgICAgZm9yIChzaXplX3QgaSA9IHN0YXJ0SW5kZXg7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBhdXRvIHZhbHVlID0gRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHsgaSwgc3RkOjpudWxsb3B0IH07CisgICAgICAg
IHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZSgqdmFsdWUpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4geyBsZW5ndGgsIFdURk1vdmUocmVzdWx0KSB9OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRWYXJp
YWRpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFZhcmlhZGljLmgJKHJldmlzaW9uIDIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFZhcmlhZGljLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE4NTcg
KzI1LDU2IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCi0j
aW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5cGVzLmgiCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CisjaW5jbHVkZSAiSlNET01Db252ZXJ0QmFzZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIENvbnZlcnNpb24gZnJvbSBKU1ZhbHVlIC0+IElt
cGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyOwotCi1l
bnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgRW5mb3Jj
ZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1zdHJ1Y3QgRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBl
bmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpK
U09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgRXhjZXB0aW9u
VGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93
ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1l
IENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93ZXImJik7Ci0KLS8vIFNw
ZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlvbmFyeSBjb252ZXJzaW9u
LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFyeShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZv
ciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0ZDo6
b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJhdGlvbihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdCBjaGFyKiBl
eHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkK
LXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09i
amVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0
ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46
OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAg
ICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlv
bik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4
Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2Vy
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+
IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJu
IENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8gQ29udmVyc2lvbiBmcm9t
IEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBVJiYpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVk
IGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNTdGF0ZSA9IEpTQ29udmVy
dGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8
VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1
ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQsIGZh
bHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4o
dmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24o
KSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAg
IHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsK
LSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG9KUzxUPihzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnRO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
T3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxl
YXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBBbnkgdHlwZQotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
QW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1ZTsKLSAgICAKLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpT
dHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUu
Z2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogTnVsbGFibGUgdHlwZQot
Ci1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGUgewotICAgICAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46OkltcGxlbWVudGF0aW9u
VHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgTnVs
bGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICAgICAgdXNpbmcgVHlw
ZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpSZXR1cm5UeXBlOwotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8
SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMQW55
Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpOdWxsYWJsZUNv
bnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90
IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1ZSBpcyBiZWluZyBwZXJm
b3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgd2hv
c2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgLy8gdGhhdCBpcyBh
bm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVuIHJldHVybiB0aGUgSURM
IG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAgIC8vCi0gICAgLy8gTk9U
RTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBPdGhlcndpc2UsIGlmIFYg
aXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBU
PyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHRoZSByZXN1bHQgb2Yg
Y29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVyIElETCB0eXBlIFQuCi0K
LSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgp
OwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhp
c09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkK
LSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCk7Ci0gICAgfQotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgICB7
Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLSAgICB7Ci0gICAg
ICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6
Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIp
KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPEV4Y2Vw
dGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2lu
ZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxUPjo6SW1wbGVtZW50
YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBKU0Nv
bnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChVJiYg
dmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6
aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0g
ICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgVDo6ZXh0cmFjdFZh
bHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBKU0M6Ompz
TnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGds
b2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFs
dWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJl
dHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0v
LyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGw+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIHN0ZDo6bnVsbHB0cl90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
LQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51bGxwdHJfdCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
Qm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMgYm9v
bCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc0Jvb2xl
YW4odmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1cHBvcnQuCi10ZW1wbGF0
ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlcj4g
ewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlcjsKLSAgICB1c2lu
ZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7Ci19OwotCi0vLyBBcnJh
eUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlw
ZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlwZWQgYXJyYXlzIHN1cHBv
cnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PiB7Ci0gICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjsK
LSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpTQzo6R2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVyZmFj
ZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdXNpbmcg
UmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6VG9X
cmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0
aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIFJl
dHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2Vy
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgfQotfTsKLQotbmFt
ZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0UHRy
T3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4ocCk7IH0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgVCYgcCkgeyByZXR1cm4g
Y29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9Ci10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0IFJlZjxUPiYgcCkgeyBy
ZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9K
U05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1
ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEludGVnZXIgdHlwZXMKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExCeXRlPiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29u
ZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAg
IHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExPY3RldD4gOiBEZWZhdWx0
Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3QgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVuZm9yY2VSYW5nZShzdGF0
ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3RldD4gewotICAgIHVzaW5n
IFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0gICAgc3RhdGljIGludDE2
X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQx
NkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9JbnQxNkNsYW1w
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50MTYoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExT
aG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9ydDo6SW1wbGVtZW50YXRp
b25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5zaWduZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKLSAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZz4gewotICAg
IHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OnRvSW50
MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3RhdGUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
bnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICBz
dGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmdMb25n
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgaW50NjRfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIo
KSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICAgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVy
biB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0lu
dDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQ2
NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmdMb25n
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgc3RhdGljIHVpbnQ2NF90
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBGbG9hdGluZyBw
b2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRmxvYXQ+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlubGluZSBmbG9hdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgZG91Ymxl
IG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1i
ZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgICAgICBkb3VibGUg
bnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1i
ZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEZsb2F0
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5
cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLQotICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b051
bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExV
bnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEb3VibGU+
IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0aWMgaW5saW5lIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
ZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0
ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0gICAgc3RhdGljIGRvdWJs
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUo
bnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgc3Rh
dGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0K
LQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0
ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAg
ICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJpbmc+IHsKLSAgICBzdGF0
aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZp
Z3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1w
dHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExCeXRl
U3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmluZ0NvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29uZmlndXJh
dGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNFbXB0eVN0
cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0
ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMg
U3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBTdHJpbmdDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRyZWF0TnVsbEFzRW1wdHlT
dHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRl
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogT2JqZWN0IHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4gOiBEZWZhdWx0Q29udmVy
dGVyPElETE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIg
PSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2Vy
KCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAgIH0KLX07Ci0KLS8vIE1B
Uks6IC0KLS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgR2VuZXJpY1NlcXVlbmNl
Q29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZlY3Rvcjx0eXBlbmFtZSBJ
RExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0KiBqc09iamVjdCkK
LSAgICAgICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0s
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAg
ICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0
KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8v
IFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8gRklYTUU6IFRoaXMgaXMg
b25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRUeXBlcyBhbmQgSURMTG9u
Zy4gVG8gYWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmljIHR5cGVzLCBhZGQgYW4g
b3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRoYXQKLSAgICAvLyB0YWtl
cyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMgYXJndW1lbnRzLgotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51bWVyaWNTZXF1ZW5jZUNv
bnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVu
Y2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmpl
Y3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9i
amVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0
ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAg
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJl
dHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4
Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhp
bmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5k
ZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdl
dCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzSW50
MzIoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpbmRleFZhbHVlIHx8
IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZCgwKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFwZSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzRG91YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGQ6OmlzbmFuKGRvdWJs
ZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwg
c2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJ
bmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleFZh
bHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZh
bHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAg
ICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXIgewotICAg
ICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZl
cnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAg
ICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAg
ICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOwotICAgICAg
ICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29s
RmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0Nv
bnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3Vs
dDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhy
b3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlND
OjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlND
OjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBK
U0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFs
dWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRl
eFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJy
YXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsK
LQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgICAg
ICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TExvbmc+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMTG9uZz46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0g
ICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0gICAgICAgIHVzaW5nIFJl
dHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+OjpS
ZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVj
dCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgICAgICB1c2lu
ZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVz
dHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91Ymxl
PiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElE
TERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3Rl
ZERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1Nl
cXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJldHVyblR5cGU7Ci0KLSAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VxdWVu
Y2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpTZXF1ZW5j
ZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUsIGlubGluZUNh
cGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0gICAgICAgICAg
ICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVudCkpOwotICAg
ICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9i
amVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENv
bnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEZyb3plbkFy
cmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIERldGFpbDo6U2VxdWVu
Y2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxVLCBpbmxp
bmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdmVjdG9yKQotICAgICAg
ICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmplY3QsIGVsZW1lbnQpKTsK
LSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRy
LCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpTQzo6b2JqZWN0Q29uc3Ry
dWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBSZWNvcmQgdHlwZQotCiBuYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyOwotCi0g
ICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
LSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
aWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+IHsKLSAgICAgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAg
ICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMUmVjb3Jk
PEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIElETFJlY29yZDxLLCBW
Pjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUgPSB0eXBlbmFtZSBLOjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0gdHlwZW5hbWUgVjo6SW1w
bGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFu
Y2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBlKE8pIGlzIFVuZGVmaW5l
ZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIAotICAgICAgICAvLyAz
LiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLgotICAgICAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7Ci0g
ICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAgICAgICAvLyA0LiBMZXQg
a2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAgICBKU0M6OlByb3BlcnR5
TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6OlN0cmluZ3MpOwotICAg
ICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAmc3RhdGUsIGtleXMsIEpT
Qzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2ggZWxlbWVudCBrZXkgb2Yg
a2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKLSAg
ICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS4K
LSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2NyaXB0b3I7Ci0gICAgICAg
ICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93blByb3BlcnR5RGVzY3Jp
cHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRpZEdldERlc2NyaXB0b3Ip
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIDIuIElmIGRlc2Mg
aXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBpcyB0cnVlOgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBjaGVjayBmb3IgZW51
bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5IHRoZSBkZWZhdWx0Ci0g
ICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAgICAgICBpZiAoIWRlc2Ny
aXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZSgpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8g
YW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkS2V5ID0g
RGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0YXRlLCBrZXkpOwogCi0g
ICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuCi0gICAgICAg
ICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0ZSwga2V5KTsKLSAgICAg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwordGVtcGxhdGU8dHlw
ZW5hbWUgSURMVHlwZT4KK3N0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U7CiAKLSAgICAgICAg
ICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURM
IHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBDb252
ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBzZXQg
aXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBj
YW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAvLyBG
SVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtleSwg
dHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5LCB0
eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPiAKK3N0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgIHVzaW5nIEl0
ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CiAKLSAgICAgICAgLy8g
Ni4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVt
PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAg
IHsKICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIAotICAgICAgICAvLyAxLiBM
ZXQgcmVzdWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KLSAgICAgICAg
YXV0byByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOwotICAgICAgICAKLSAg
ICAgICAgLy8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgewotICAgICAgICAg
ICAgLy8gMS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1
ZS4KLSAgICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdl
IG5lZWQgdGhlIGtleSB0byBiZQotICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEg
SlNWYWx1ZS4KLQotICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0
b0pTPFY+KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7Ci0KLSAgICAg
ICAgICAgIC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwg
ZXNLZXksIGVzVmFsdWUpLgotICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5r
ZXkpLCBlc1ZhbHVlKTsKLQotICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRy
dWUuCi0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5
cGUgPSBUOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0
RGljdGlvbmFyeTxUPihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnREaWN0aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCi0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVs
dENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBUIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUp
OwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1
bmN0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3Bl
KTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICByZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2Jq
ZWN0ID0gZmFsc2U7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
dG9KUyhEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQo
VSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpm
b3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogQ2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZl
cnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxi
YWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
ciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIg
PSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmds
b2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5
Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
cmVzdWx0KTsKICAgICB9CiB9OwogCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBVbmlvbiB0eXBlCi0K
LXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQsIGJvb2wgZW5hYmxlZD4K
LXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJu
VHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBl
LCBULCB0cnVlPiB7Ci0gICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUp
KTsKLSAgICB9Ci19OwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBWYXJpYWRpY0NvbnZl
cnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgdXNpbmcgSXRlbSA9IHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8VD47CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+IHsK
LSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKQorICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewotICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0
ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgICAgIHJldHVy
biBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwogICAgIH0KIH07CiAKLW5hbWVzcGFjZSBE
ZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0aW9uPgotICAg
IHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4K
LSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVlPgotICAgIHsKLSAgICAgICAg
dXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAgIH07Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPgorc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETFR5cGU+IHsKKyAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252
ZXJ0ZXJCYXNlPElETFR5cGU+OjpJdGVtOworICAgIHVzaW5nIENvbnRhaW5lciA9IFZlY3RvcjxJ
dGVtPjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlv
bmFsRnJvbnQ8TGlzdCwgZmFsc2U+Ci0gICAgewotICAgICAgICB1c2luZyB0eXBlID0gdm9pZDsK
KyAgICBzdHJ1Y3QgUmVzdWx0IHsKKyAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CiAgICAgfTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2luZyBDb25kaXRpb25hbEZy
b250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExpc3QsIGNvbmRpdGlvbj46
OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5p
b248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5n
IFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5
cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxpc3QgPSBicmlnYW5kOjpm
aWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmlnYW5kOjpzaXplPE51bWVy
aWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZOdW1lcmljVHlw
ZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIE51bWVyaWNUeXBl
ID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJlck9mTnVtZXJpY1R5cGVz
ICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gY2hlY2sgZm9yIElETEVu
dW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmlnYW5kOjpfMT4+OwotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlwZXMgPSBicmlnYW5kOjpz
aXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlN0
cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJl
IDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU3RyaW5n
VHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51bWJlck9mU3RyaW5nVHlw
ZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVy
PFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTZXF1ZW5j
ZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlNlcXVlbmNlVHlw
ZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9y
IDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgU2VxdWVuY2VU
eXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBudW1iZXJPZlNlcXVlbmNl
VHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6Ol8xPj47Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID0gYnJpZ2FuZDo6
c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0g
MSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxGcm96ZW5B
cnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMD47Ci0KLSAgICB1c2lu
ZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMRGlj
dGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJl
ck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2
YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDAgfHwg
bnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgZGljdGlv
bmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
aGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyAhPSAwOwotICAgIHVz
aW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0aW9uYXJ5VHlwZUxpc3Qs
IGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBicmlnYW5kOjpzaXplPFJl
Y29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJPZlJlY29yZFR5
cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9IDA7Ci0gICAgdXNpbmcg
UmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxpc3QsIGhhc1JlY29yZFR5
cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVjdFR5cGUgPSAobnVtYmVy
T2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzICsgbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0KLSAgICB1c2luZyBJbnRl
cmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExJbnRlcmZhY2U8
YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlwZSBpbmNsdWRlcyBhIG51
bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJ
REwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVsbFR5cGUgPSBicmln
YW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBicmlnYW5kOjpfMT4+Ojp2
YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJ
RExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVzIGJlIHRoZSBmbGF0dGVu
ZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAgICAvLyBOT1RFOiBVbmlv
biBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAgICAgCi0gICAgICAgIC8v
IDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAgICAgaWYgKGhhc0RpY3Rp
b25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZl
cnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFz
RGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERp
Y3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAgICAgMi4gSWYg
dHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBj
b252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICBpZiAoaGFz
UmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgUmVjb3Jk
VHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElmIFYgaXMgYSBwbGF0Zm9y
bSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhbiBp
bnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1
ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgIDIu
IElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0
IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAgLy8gICAgICAgICAoRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQotICAgICAgICBpZiAoYnJp
Z2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+Ojp2YWx1ZSkg
ewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiByZXR1cm5WYWx1ZTsKLSAg
ICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVMaXN0PihbJl0oYXV0byYm
IHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxkZWNsdHlwZSh0eXBlKT46
OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0g
dHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAgICAgICAgICAgIHVzaW5n
IFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAgICAgICAgICAgIHVzaW5n
IFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFJhd1R5
cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhc3RlZFZhbHVlID0g
V3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGlmICgh
Y2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5cGUoSW1wbGVtZW50YXRp
b25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYg
KHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJldHVyblZhbHVl
LnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4gSWYgViBpcyBhbnkga2lu
ZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0M6OkpTQ2VsbCog
Y2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChjZWxsLT5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVzZQotICAgICAgICAgICAg
ICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhlIHZhbHVl
IGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8v
ICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUsIHRoZW46Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0aGUgcmVzdWx0IG9mIEdl
dE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAy
LiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
IDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVh
dGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgc2VxdWVuY2Ugb2YgdGhh
dCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAw
OwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUs
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0
b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNo
ZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU2VxdWVu
Y2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMi4g
SWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhlbjoKLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0
aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJl
dHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4g
SWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5n
IGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96ZW4gYXJyYXkgb2YgdGhh
dCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIg
Ym9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0gMDsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlwZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0l0ZXJh
dG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpD
aGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIEZyb3pl
bkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0
aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb252ZXJ0aW5nIFYg
dG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0
aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RG
OjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIERp
Y3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52
YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYg
dG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5
cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tN
b3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBl
LCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGNhbGxiYWNrIGlu
dGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0
aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIChGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlIGFuZCBzdGVwIDEyLjUp
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3Qs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2Jq
ZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMgYSBCb29sZWFuIHZhbHVl
LCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBib29sZWFuLCB0
aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBib29sZWFuLgotICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwg
c3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOwotICAgICAgICBp
ZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVy
PihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFu
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUsIHRoZW46Ci0gICAgICAg
IC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAg
IGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlw
ZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUpIHsKLSAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTQuIElmIHR5cGVz
IGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU3RyaW5nVHlw
ZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBp
ZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVj
a01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIFN0cmluZ1R5
cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAg
ICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KLSAgICAg
ICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6
OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVt
ZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkp
OwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCi0gICAgICAgIGlmICho
YXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01v
dmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETEJvb2xlYW4s
IGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAg
ICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuaW9uPFQuLi4+
PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAgIHVzaW5nIFR5cGVMaXN0
ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBl
ID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6
Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlhbnRfc2l6ZTxJ
bXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0gICAgewotICAgICAgICBh
dXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8SlND
OjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6Zm9yX2VhY2g8U2VxdWVu
Y2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdU
Rjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAg
ICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdh
bmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFs
dWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgQVNT
RVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlLnZhbHVlKCk7Ci0g
ICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBlCi0KLXRlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRGF0ZT4gewot
ICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvRGF0ZSgmc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEYXRl
PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRlcjxJRExKU09OPiB7Ci0g
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlN0cmluZ2lmeSgmc3Rh
dGUsIHZhbHVlLCAwKTsKLSAgICB9CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OkpTT05QYXJz
ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVl
PFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUsICZnbG9iYWxPYmplY3Qp
IDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBFdmVu
dCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8
VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+OwotCi0gICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAgICAgIGF1dG8gbGlzdGVu
ZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBjdXJyZW50V29ybGQoJnN0
YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxpc3RlbmVyOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZlciB0eXBlCi0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0
dXJuVHlwZSA9IFJlZlB0cjxUPjsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgot
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhj
ZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAg
IFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgc3RhdGUsIHZh
bHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQotICAgICAgICAgICAgZXhjZXB0
aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0K
LX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExYUGF0aE5T
UmVzb2x2ZXI8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsK
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBlCi0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURMV2ViR0xB
bnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJp
YWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZl
cnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVt
ZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVy
ZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxU
PjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+
KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJC
YXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29u
dmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVj
dG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90
IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJn
dW1lbnRzOwotICAgICAgICB9OwotICAgIH07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBj
b252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3Rh
cnRJbmRleClJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2Vi
R0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRXZWJHTC5oCShyZXZpc2lvbiAyMTE1NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQ29udmVydC5oOjIxMTU0OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFdlYkdMLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJCdWZmZXJTb3VyY2UuaCIKKyNp
bmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURMVHlwZXMuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCisjaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTT05PYmplY3QuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb252
ZXJzaW9uIGZyb20gSlNWYWx1ZSAtPiBJbXBsZW1lbnRhdGlvbgordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IENvbnZlcnRlcjsKKworZW51bSBjbGFzcyBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb24geyBOb3JtYWwsIEVuZm9yY2VSYW5nZSwgQ2xhbXAgfTsKK2VudW0gY2xhc3MgU3Ry
aW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24geyBOb3JtYWwsIFRyZWF0TnVsbEFzRW1wdHlTdHJp
bmcgfTsKKworc3RydWN0IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyIHsKKyAgICB2b2lkIG9wZXJh
dG9yKCkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorICAg
IHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4g
dHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpKU09iamVj
dCYsIEV4Y2VwdGlvblRocm93ZXImJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBF
eGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNET01HbG9iYWxPYmplY3QmLCBFeGNl
cHRpb25UaHJvd2VyJiYpOworCisvLyBTcGVjaWFsaXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3Ig
SURMIGRpY3Rpb25hcnkgY29udmVyc2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVy
dERpY3Rpb25hcnkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCisvLyBTcGVjaWFs
aXplZCBieSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGQ6Om9wdGlvbmFsPFQ+IHBhcnNlRW51bWVyYXRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252
ZXJ0RW51bWVyYXRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gY29uc3QgY2hhciogZXhwZWN0ZWRFbnVtZXJhdGlvblZhbHVlcygpOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUsIGdsb2JhbE9iamVjdCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQoreworICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRp
b25UaHJvd2VyKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9u
VGhyb3dlcikpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Cit9CisKKy8vIENvbnZlcnNpb24gZnJvbSBJbXBsZW1lbnRhdGlvbiAtPiBKU1ZhbHVlCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYm
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYp
OwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7CisKKy8v
IFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVy
c2lvbi4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNTdHJpbmcqIGNvbnZlcnRFbnVtZXJh
dGlvblRvSlMoSlNDOjpFeGVjU3RhdGUmLCBUKTsKKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBi
b29sIG5lZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZSwgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdD4KK3N0cnVjdCBK
U0NvbnZlcnRlck92ZXJsb2FkZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlND
b252ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIHRydWU+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K3N0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8VCwgdHJ1ZSwgZmFsc2U+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCBmYWxzZSwgZmFsc2U+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBVJiYg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rk
Ojpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxP
YmplY3QmLCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZl
cnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5M
SUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlv
bihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9KUzxUPihzdGF0ZSwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
CisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJu
IEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElL
RUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24o
c3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQ8VD4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0Q29udmVydGVyIHsKKyAgICB1c2luZyBSZXR1
cm5UeXBlID0gdHlwZW5hbWUgVDo6SW1wbGVtZW50YXRpb25UeXBlOworfTsKKworLy8gTUFSSzog
LQorLy8gTUFSSzogQW55IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEFu
eT4gOiBEZWZhdWx0Q29udmVydGVyPElETEFueT4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBK
U0M6OkpTVmFsdWU7CisgICAgCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBKU0M6
OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZS5nZXQoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExB
bnk+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6SlNWYWx1ZSYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4mIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOworICAgIH0KK307CisKKy8vIE1BUks6IC0K
Ky8vIE1BUks6IE51bGxhYmxlIHR5cGUKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAgIHN0cnVjdCBOdWxsYWJsZUNv
bnZlcnNpb25UeXBlIHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxl
PElETFR5cGU+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU8SURMSW50ZXJmYWNl
PFQ+PiB7CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+Pjo6UmV0dXJuVHlwZTsKKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEFueT4geworICAgICAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgQ29udmVydGVyPElETEFueT46OlJldHVyblR5cGU7CisgICAgfTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIERldGFpbDo6TnVsbGFibGVDb252ZXJzaW9uVHlwZTxUPjo6VHlwZTsKKyAgICAKKyAg
ICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIGFuZCB0aGUgY29udmVyc2lvbiB0byBh
biBJREwgdmFsdWUgaXMgYmVpbmcgcGVyZm9ybWVkCisgICAgLy8gZHVlIHRvIFYgYmVpbmcgYXNz
aWduZWQgdG8gYW4gYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBudWxsYWJsZSBjYWxsYmFjayBm
dW5jdGlvbgorICAgIC8vIHRoYXQgaXMgYW5ub3RhdGVkIHdpdGggW1RyZWF0Tm9uT2JqZWN0QXNO
dWxsXSwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0eXBlIFQ/CisgICAgLy8gdmFsdWUg
bnVsbC4KKyAgICAvLworICAgIC8vIE5PVEU6IEhhbmRsZWQgZWxzZXdoZXJlLgorICAgIC8vCisg
ICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIHJldHVy
biB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8gdmFsdWUgbnVsbC4KKyAgICAvLyAzLiBPdGhlcndp
c2UsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB1c2luZyB0aGUgcnVsZXMgZm9y
IHRoZSBpbm5lciBJREwgdHlwZSBULgorCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51
bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSk7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qp
CisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
ICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVl
KCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBn
bG9iYWxPYmplY3QpOworICAgIH0KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAg
ICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJh
dGlvbik7CisgICAgfQorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwor
ICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4
Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2Vw
dGlvblRocm93ZXIpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25U
aHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4gQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3RkOjpmb3J3YXJk
PEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKKyAgICB9CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgor
ICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlv
blRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElE
TE51bGxhYmxlPFQ+PiB7CisgICAgdXNpbmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUg
SURMTnVsbGFibGU8VD46OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGU7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gSlNDb252ZXJ0ZXI8VD46Om5l
ZWRzR2xvYmFsT2JqZWN0OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKFQ6Omlz
TnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAg
ICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoVDo6ZXh0cmFjdFZhbHVlRnJvbU51
bGxhYmxlKHZhbHVlKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21O
dWxsYWJsZSh2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Cisg
ICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogTnVsbCB0eXBlCisKK3RlbXBsYXRlPD4g
c3RydWN0IENvbnZlcnRlcjxJRExOdWxsPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTnVsbD4gewor
ICAgIHN0YXRpYyBzdGQ6Om51bGxwdHJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbD4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoc3RkOjpudWxscHRyX3QpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBCb29sZWFuIHR5cGUKKwordGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJvb2xlYW4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExC
b29sZWFuPiB7CisgICAgc3RhdGljIGJvb2wgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZS50b0Jvb2xl
YW4oJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExCb29sZWFuPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxz
ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsK
KworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChib29sIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNCb29sZWFuKHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBBcnJh
eUJ1ZmZlciBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPEpTQzo6QXJyYXlCdWZmZXI+IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6
OkpTQXJyYXlCdWZmZXI7CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9IEpTQzo6QXJy
YXlCdWZmZXIqOworfTsKKworLy8gQXJyYXlCdWZmZXJWaWV3IHN1cHBvcnQuCit0ZW1wbGF0ZTw+
IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OworICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PjsKK307
CisKKy8vIFR5cGVkIGFycmF5cyBzdXBwb3J0LgordGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4g
c3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkdlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPj4geworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj47CisgICAgdXNpbmcgVG9XcmFwcGVkUmV0dXJuVHlwZSA9
IFJlZlB0cjxKU0M6OkdlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPj47Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBJbnRlcmZhY2UgdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETElu
dGVyZmFjZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8VD46OlRvV3JhcHBlZFJldHVyblR5cGU7CisgICAgdXNpbmcgV3Jh
cHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46OldyYXBw
ZXJDbGFzczsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBlOjp0
b1dyYXBwZWQodm0sIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3QpKQorICAg
ICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4g
b2JqZWN0OworICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFQqIHApIHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8VCo+KHApOyB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9y
UmVmKGNvbnN0IFQmIHApIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8VCY+KHApOyB9Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gaW5saW5lIFQqIGdldFB0ck9yUmVmKGNvbnN0IFJlZlB0cjxUPiYgcCkgeyBy
ZXR1cm4gcC5nZXQoKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJP
clJlZihjb25zdCBSZWY8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KKworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWls
OjpnZXRQdHJPclJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisv
LyBNQVJLOiBJbnRlZ2VyIHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExC
eXRlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHN0YXRpYyBpbnQ4X3QgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlv
bikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b0ludDhDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b0ludDgoc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExCeXRlPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEJ5dGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMT2N0ZXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPY3RldD4geworICAgIHN0YXRp
YyB1aW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJu
IHRvVUludDhFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUlu
dDhDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0b1VJbnQ4
KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMT2N0ZXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMT2N0ZXQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
aG9ydD4geworICAgIHN0YXRpYyBpbnQxNl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgor
ICAgICAgICAgICAgcmV0dXJuIHRvSW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50MTZDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0b0ludDE2KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5h
bWUgSURMU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9y
dD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IHsKKyAgICBzdGF0aWMgdWlu
dDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9V
SW50MTZFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50MTYo
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2ln
bmVkU2hvcnQ6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlw
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9uZz4gOiBEZWZhdWx0
Q29udmVydGVyPElETExvbmc+IHsKKyAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGlj
IGludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICByZXR1cm4g
dG9JbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQz
MkNsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRv
SW50MzIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRl
cjxJRExMb25nPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETExvbmc6OkltcGxlbWVu
dGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFs
c2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7
CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMVW5zaWduZWRMb25nPiB7CisgICAgc3RhdGljIHVpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDMyRW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQzMkNsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlLnRvVUludDMyKCZzdGF0ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nPiB7Cisg
ICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZzo6SW1wbGVtZW50YXRpb25U
eXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExMb25nTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETExvbmdMb25n
PiB7CisgICAgc3RhdGljIGludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuYXNJ
bnQzMigpOworCisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFs
dWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRvSW50NjQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNO
dW1iZXIodmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExVbnNpZ25lZExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9u
Zz4geworICAgIHN0YXRpYyB1aW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUu
YXNVSW50MzIoKTsKKworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDY0RW5mb3JjZVJhbmdlKHN0YXRl
LCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ2NENsYW1wKHN0YXRlLCB2YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQor
fTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
eworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmdMb25nOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gTUFS
SzogLQorLy8gTUFSSzogRmxvYXRpbmcgcG9pbnQgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETEZsb2F0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKworICAg
IHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBpZiAoVU5M
SUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZpbml0
ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG51bWJlcik7CisgICAgfQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAg
ICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExGbG9hdD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJ
RExGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9h
dD4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgc3RhdGlj
IGlubGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
ZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
bnVtYmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4odmFsdWUudG9OdW1iZXIoJnN0YXRlKSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKKyAgICB1
c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRmxvYXQ6OkltcGxlbWVudGF0aW9u
VHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRG91YmxlPiB7
CisgICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGRvdWJsZSBudW1iZXIpCisgICAgeworICAgICAgICBp
ZiAoVU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVtYmVyOwor
ICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
ICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICAgICAgaWYg
KFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25G
aW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEb3VibGU+IHsKKyAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETFVucmVz
dHJpY3RlZERvdWJsZT4geworICAgIHN0YXRpYyBpbmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICB1c2luZyBUeXBl
ID0gdHlwZW5hbWUgSURMVW5yZXN0cmljdGVkRG91YmxlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgLy8gQWRkIG92ZXJsb2FkIGZvciBN
ZWRpYVRpbWUuCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KE1lZGlhVGltZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlLnRvRG91YmxlKCkp
OworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFN0cmluZyB0eXBlcworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRE9NU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRE9NU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkK
KyAgICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVy
dGVyPElETERPTVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBm
YWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETEJ5
dGVTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAg
IHsKKyAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCisgICAgICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlVG9CeXRlU3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMQnl0ZVN0cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlND
Ojpqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VVNWU3RyaW5nPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uID0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAg
ICB7CisgICAgICAgIGlmIChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpUcmVhdE51bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvVVNWU3Ry
aW5nKHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6
OmpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6
IC0KKy8vIE1BUks6IE9iamVjdCB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJ
RExPYmplY3Q+IDogRGVmYXVsdENvbnZlcnRlcjxJRExPYmplY3Q+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAg
c3RhdGljIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNl
cHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4geyB2bSwgSlNDOjphc09iamVjdCh2YWx1
ZSkgfTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBBcnJheS1saWtlIHR5cGVz
CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Cisg
ICAgc3RydWN0IEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7CisgICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSBWZWN0b3I8dHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlPjsKKwor
ICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU09iamVjdCoganNPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJldHVyblR5
cGUgcmVzdWx0OworICAgICAgICAgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCBqc09iamVj
dCwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNW
YWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENv
bnZlcnRlcjxJRExUeXBlPjo6Y29udmVydCgqc3RhdGUsIGpzVmFsdWUpOworICAgICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoY29udmVydGVk
VmFsdWUpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvLyBTcGVjaWFsaXphdGlvbiBmb3IgbnVtZXJpYyB0eXBl
cworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIHRoZSBJRExGbG9h
dGluZ1BvaW50VHlwZXMgYW5kIElETExvbmcuIFRvIGFkZAorICAgIC8vIHN1cHBvcnQgZm9yIG1v
cmUgbnVtZXJpYyB0eXBlcywgYWRkIGFuIG92ZXJsb2FkIG9mIENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydCB0aGF0CisgICAgLy8gdGFrZXMgYW4gRXhlY1N0YXRlLCBUaHJvd1Njb3BlLCBkb3Vi
bGUgYXMgaXRzIGFyZ3VtZW50cy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAg
IHN0cnVjdCBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBHZW5lcmlj
Q29udmVydGVyID0gR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFR5cGU+OworICAgICAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsK
KworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAg
ICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU0M6OkpTT2Jq
ZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghSlND
Ojppc0pTQXJyYXkob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZl
cnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgSlNDOjpKU0FycmF5
KiBhcnJheSA9IEpTQzo6YXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgaWYgKCFhcnJheS0+
Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFi
bGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChz
dGF0ZSwgb2JqZWN0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxl
bmd0aCgpOworCisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0LnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IElzIHRoZSByaWdodCBleGNlcHRpb24gdG8gdGhyb3c/CisgICAgICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5k
ZXhpbmdUeXBlID0gYXJyYXktPmluZGV4aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFz
azsKKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFw
ZSkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVy
Zmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFp
bmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRl
LCBpbmRleFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpJbnQz
MlNoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5i
dXR0ZXJmbHkoKS0+Y29udGlndW91c0ludDMyKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghaW5kZXhWYWx1ZSB8fCBpbmRleFZhbHVlLmlzSW50MzIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoaW5kZXhWYWx1ZS5hc0lu
dDMyKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6
RG91YmxlU2hhcGUpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IGFy
cmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91c0RvdWJsZSgpW2ldOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RkOjppc25hbihkb3VibGVWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8
SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHNjb3BlLCBkb3VibGVWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LnVuY2hlY2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVy
dChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0
IFNlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0g
SlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9i
amVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6
OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgp
LT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAg
ICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlS
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0
aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4VmFsdWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisK
KyAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExU
eXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
ICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwor
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGluZGV4VmFs
dWUgPSBKU0M6OmpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRl
ZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsK
KyAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVy
dGVkVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNlcXVlbmNlQ29u
dmVydGVyPElETExvbmc+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZTsKKworICAgICAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNl
Q29udmVydGVyPElETExvbmc+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExG
bG9hdD4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETEZsb2F0Pjo6UmV0dXJuVHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVy
PElETEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmlj
dGVkRmxvYXQ+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OlJldHVyblR5cGU7CisKKyAg
ICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFNl
cXVlbmNlQ29udmVydGVyPElETERvdWJsZT4geworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0g
dHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETERvdWJsZT46OlJldHVyblR5cGU7
CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5j
ZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJu
VHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRE
b3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVk
RG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9
IHR5cGVuYW1lIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7CisKKyAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252
ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFUsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKKyAgICB7CisgICAgICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICAgICAgZm9yIChhdXRvJiBlbGVt
ZW50IDogdmVjdG9yKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9i
YWxPYmplY3QsIGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXko
JmV4ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgIH0KK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisg
ICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAg
ICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IHZlY3RvcikKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywg
Z2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7CisgICAgICAgIGF1dG8qIGFycmF5ID0gSlNDOjpjb25z
dHJ1Y3RBcnJheSgmZXhlYywgbnVsbHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgICAg
IHJldHVybiBKU0M6Om9iamVjdENvbnN0cnVjdG9yRnJlZXplKCZleGVjLCBhcnJheSk7CisgICAg
fQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogUmVjb3JkIHR5cGUKKworbmFtZXNwYWNlIERl
dGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMU3RyaW5nVHlwZT4KKyAgICBzdHJ1Y3Qg
SWRlbnRpZmllckNvbnZlcnRlcjsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJD
b252ZXJ0ZXI8SURMRE9NU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoc3RhdGUsIGlkZW50aWZp
ZXIpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZp
ZXJDb252ZXJ0ZXI8SURMVVNWU3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmll
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJUb1VTVlN0cmluZyhz
dGF0ZSwgaWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgQ29udmVydGVyPElETFJlY29yZDxLLCBWPj4gOiBE
ZWZhdWx0Q29udmVydGVyPElETFJlY29yZDxLLCBWPj4geworICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBJRExSZWNvcmQ8SywgVj46OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2lu
ZyBLZXlUeXBlID0gdHlwZW5hbWUgSzo6SW1wbGVtZW50YXRpb25UeXBlOworICAgIHVzaW5nIFZh
bHVlVHlwZSA9IHR5cGVuYW1lIFY6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBMZXQgcmVz
dWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi4KKyAgICAgICAgLy8g
Mi4gSWYgVHlwZShPKSBpcyBVbmRlZmluZWQgb3IgTnVsbCwgcmV0dXJuIHJlc3VsdC4KKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJv
dyBhIFR5cGVFcnJvci4KKyAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIAorICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsK
KyAgICAKKyAgICAgICAgLy8gNC4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0o
KS4KKyAgICAgICAgSlNDOjpQcm9wZXJ0eU5hbWVBcnJheSBrZXlzKCZ2bSwgSlNDOjpQcm9wZXJ0
eU5hbWVNb2RlOjpTdHJpbmdzKTsKKyAgICAgICAgb2JqZWN0LT5nZXRPd25Qcm9wZXJ0eU5hbWVz
KG9iamVjdCwgJnN0YXRlLCBrZXlzLCBKU0M6OkVudW1lcmF0aW9uTW9kZSgpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAvLyA1LiBSZXBlYXQs
IGZvciBlYWNoIGVsZW1lbnQga2V5IG9mIGtleXMgaW4gTGlzdCBvcmRlcjoKKyAgICAgICAgZm9y
IChhdXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8u
W1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuCisgICAgICAgICAgICBKU0M6OlByb3BlcnR5RGVzY3Jp
cHRvciBkZXNjcmlwdG9yOworICAgICAgICAgICAgYm9vbCBkaWRHZXREZXNjcmlwdG9yID0gb2Jq
ZWN0LT5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoJnN0YXRlLCBrZXksIGRlc2NyaXB0b3IpOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAg
ICAgaWYgKCFkaWRHZXREZXNjcmlwdG9yKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVt
ZXJhYmxlXV0gaXMgdHJ1ZToKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IERv
IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGVudW1lcmFibGUgLyB1bmRlZmluZWQsIG9yIGlzIHRoaXMg
aGFuZGxlZCBieSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgLy8gZW51bWVyYXRpb24gbW9kZT8K
KworICAgICAgICAgICAgaWYgKCFkZXNjcmlwdG9yLnZhbHVlKCkuaXNVbmRlZmluZWQoKSAmJiBk
ZXNjcmlwdG9yLmVudW1lcmFibGUoKSkgeworICAgICAgICAgICAgICAgIC8vIDEuIExldCB0eXBl
ZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuCisgICAgICAg
ICAgICAgICAgYXV0byB0eXBlZEtleSA9IERldGFpbDo6SWRlbnRpZmllckNvbnZlcnRlcjxLPjo6
Y29udmVydChzdGF0ZSwga2V5KTsKKworICAgICAgICAgICAgICAgIC8vIDIuIExldCB2YWx1ZSBi
ZSA/IEdldChPLCBrZXkpLgorICAgICAgICAgICAgICAgIGF1dG8gc3ViVmFsdWUgPSBvYmplY3Qt
PmdldCgmc3RhdGUsIGtleSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZh
bHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLgorICAgICAgICAgICAgICAg
IGF1dG8gdHlwZWRWYWx1ZSA9IENvbnZlcnRlcjxWPjo6Y29udmVydChzdGF0ZSwgc3ViVmFsdWUp
OworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gNC4gSWYgdHlwZWRLZXkgaXMgYWxyZWFk
eSBhIGtleSBpbiByZXN1bHQsIHNldCBpdHMgdmFsdWUgdG8gdHlwZWRWYWx1ZS4KKyAgICAgICAg
ICAgICAgICAvLyBOb3RlOiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBPIGlzIGEgcHJveHkgb2JqZWN0
LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhpcyBjYXNlLgorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgYXBwZW5kIHRvIHJlc3Vs
dCBhIG1hcHBpbmcgKHR5cGVkS2V5LCB0eXBlZFZhbHVlKS4KKyAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHsgdHlwZWRLZXksIHR5cGVkVmFsdWUgfSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyA2LiBSZXR1cm4gcmVzdWx0LgorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEssIHR5cGVuYW1lIFY+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xv
YmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE1hcFR5cGU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgTWFwVHlwZSYgbWFwKQorICAgIHsKKyAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgIAorICAgICAgICAvLyAxLiBMZXQgcmVz
dWx0IGJlICEgT2JqZWN0Q3JlYXRlKCVPYmplY3RQcm90b3R5cGUlKS4KKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdCgmc3RhdGUpOworICAgICAgICAKKyAgICAgICAg
Ly8gMi4gUmVwZWF0LCBmb3IgZWFjaCBtYXBwaW5nIChrZXksIHZhbHVlKSBpbiBEOgorICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IG1hcCkgeworICAgICAgICAgICAgLy8g
MS4gTGV0IGVzS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNjcmlwdCB2YWx1ZS4KKyAg
ICAgICAgICAgIC8vIE5vdGUsIHRoaXMgc3RlcCBpcyBub3QgcmVxdWlyZWQsIGFzIHdlIG5lZWQg
dGhlIGtleSB0byBiZQorICAgICAgICAgICAgLy8gYW4gSWRlbnRpZmllciwgbm90IGEgSlNWYWx1
ZS4KKworICAgICAgICAgICAgLy8gMi4gTGV0IGVzVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRv
IGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICBhdXRvIGVzVmFsdWUgPSB0b0pTPFY+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGtleVZhbHVlUGFpci52YWx1ZSk7CisKKyAgICAgICAgICAg
IC8vIDMuIExldCBjcmVhdGVkIGJlICEgQ3JlYXRlRGF0YVByb3BlcnR5KHJlc3VsdCwgZXNLZXks
IGVzVmFsdWUpLgorICAgICAgICAgICAgYm9vbCBjcmVhdGVkID0gcmVzdWx0LT5wdXREaXJlY3Qo
dm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIGtleVZhbHVlUGFpci5rZXkpLCBl
c1ZhbHVlKTsKKworICAgICAgICAgICAgLy8gNC4gQXNzZXJ0OiBjcmVhdGVkIGlzIHRydWUuCisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNyZWF0ZWQsIGNyZWF0ZWQpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gMy4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBEaWN0aW9uYXJ5IHR5cGUKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSBU
OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlv
bmFyeTxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExEaWN0aW9uYXJ5PFQ+PiB7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBUJiBkaWN0aW9uYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0
aW9uYXJ5VG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBkaWN0aW9uYXJ5KTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBFbnVtZXJhdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IDogRGVmYXVsdENvbnZl
cnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBUIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
Y29udmVydEVudW1lcmF0aW9uPFQ+KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiB7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBleGVjLCBUIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvblRvSlMoZXhlYywgdmFsdWUpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGZ1bmN0aW9uIHR5cGUKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9u
PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAg
IHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0Z1bmN0
aW9uKCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKKyAg
ICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tGdW5jdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0g
ZmFsc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhE
ZXRhaWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQ2FsbGJhY2sg
aW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJ
RExDYWxsYmFja0ludGVyZmFjZTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETENhbGxiYWNrSW50
ZXJmYWNlPFQ+PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERl
ZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNl
cHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIo
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9i
amVjdCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVy
dGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSBmYWxzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBVJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0b0pTKERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3Jl
YXRlZChVJiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJL
OiBVbmlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lIFQs
IGJvb2wgZW5hYmxlZD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjsKKwordGVtcGxhdGU8
dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBULCB0cnVlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBSZXR1cm5UeXBlKENvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZSBUPgorc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUs
IFQsIGZhbHNlPiB7CisgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8UmV0dXJuVHlwZT4gY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorfTsKKworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+CisgICAgc3RydWN0IENvbmRpdGlvbmFs
RnJvbnQ7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25kaXRp
b25hbEZyb250PExpc3QsIHRydWU+CisgICAgeworICAgICAgICB1c2luZyB0eXBlID0gYnJpZ2Fu
ZDo6ZnJvbnQ8TGlzdD47CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Cisg
ICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgZmFsc2U+CisgICAgeworICAgICAgICB1
c2luZyB0eXBlID0gdm9pZDsKKyAgICB9OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0LCBi
b29sIGNvbmRpdGlvbj4KK3VzaW5nIENvbmRpdGlvbmFsRnJvbnQgPSB0eXBlbmFtZSBEZXRhaWw6
OkNvbmRpdGlvbmFsRnJvbnQ8TGlzdCwgY29uZGl0aW9uPjo6dHlwZTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gc3RydWN0IENvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gOiBEZWZhdWx0Q29u
dmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+
OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAg
IHVzaW5nIE51bWVyaWNUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExO
dW1iZXI8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
Zk51bWVyaWNUeXBlcyA9IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWU7Cisg
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAwIHx8IG51bWJlck9mTnVt
ZXJpY1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIG51bWVyaWMgdHlwZXMgaW4gYW4g
SURMVW5pb24uIik7CisgICAgdXNpbmcgTnVtZXJpY1R5cGUgPSBDb25kaXRpb25hbEZyb250PE51
bWVyaWNUeXBlTGlzdCwgbnVtYmVyT2ZOdW1lcmljVHlwZXMgIT0gMD47CisKKyAgICAvLyBGSVhN
RTogVGhpcyBzaG91bGQgYWxzbyBjaGVjayBmb3IgSURMRW51bWVyYXRpb248VD4uCisgICAgdXNp
bmcgU3RyaW5nVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIHN0ZDo6aXNfYmFz
ZV9vZjxJRExTdHJpbmcsIGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2
YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU3RyaW5nVHlwZXMgPT0gMCB8fCBudW1i
ZXJPZlN0cmluZ1R5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHN0cmluZyB0eXBlcyBp
biBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTdHJpbmdUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxTdHJpbmdUeXBlTGlzdCwgbnVtYmVyT2ZTdHJpbmdUeXBlcyAhPSAwPjsKKworICAgIHVzaW5n
IFNlcXVlbmNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMU2VxdWVu
Y2U8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlNl
cXVlbmNlVHlwZXMgPSBicmlnYW5kOjpzaXplPFNlcXVlbmNlVHlwZUxpc3Q+Ojp2YWx1ZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mU2VxdWVuY2VUeXBlcyA9PSAwIHx8IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzZXF1ZW5jZSB0eXBlcyBpbiBh
biBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGUgPSBDb25kaXRpb25hbEZyb250
PFNlcXVlbmNlVHlwZUxpc3QsIG51bWJlck9mU2VxdWVuY2VUeXBlcyAhPSAwPjsKKworICAgIHVz
aW5nIEZyb3plbkFycmF5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURM
RnJvemVuQXJyYXk8YnJpZ2FuZDo6XzE+PjsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBu
dW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPSBicmlnYW5kOjpzaXplPEZyb3plbkFycmF5VHlwZUxp
c3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9
PSAwIHx8IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3Ig
MSBGcm96ZW5BcnJheSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICB1c2luZyBGcm96ZW5B
cnJheVR5cGUgPSBDb25kaXRpb25hbEZyb250PEZyb3plbkFycmF5VHlwZUxpc3QsIG51bWJlck9m
RnJvemVuQXJyYXlUeXBlcyAhPSAwPjsKKworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlTGlzdCA9
IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExEaWN0aW9uYXJ5PGJyaWdhbmQ6Ol8xPj47
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPSBi
cmlnYW5kOjpzaXplPERpY3Rpb25hcnlUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBkaWN0aW9uYXJ5IHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNEaWN0aW9uYXJ5VHlwZSA9IG51
bWJlck9mRGljdGlvbmFyeVR5cGVzICE9IDA7CisgICAgdXNpbmcgRGljdGlvbmFyeVR5cGUgPSBD
b25kaXRpb25hbEZyb250PERpY3Rpb25hcnlUeXBlTGlzdCwgaGFzRGljdGlvbmFyeVR5cGU+Owor
CisgICAgdXNpbmcgUmVjb3JkVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElz
SURMUmVjb3JkPGJyaWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVt
YmVyT2ZSZWNvcmRUeXBlcyA9IGJyaWdhbmQ6OnNpemU8UmVjb3JkVHlwZUxpc3Q+Ojp2YWx1ZTsK
KyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mUmVjb3JkVHlwZXMgPT0gMCB8fCBudW1iZXJPZlJl
Y29yZFR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHJlY29yZCB0eXBlcyBpbiBhbiBJ
RExVbmlvbi4iKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzUmVjb3JkVHlwZSA9IG51
bWJlck9mUmVjb3JkVHlwZXMgIT0gMDsKKyAgICB1c2luZyBSZWNvcmRUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxSZWNvcmRUeXBlTGlzdCwgaGFzUmVjb3JkVHlwZT47CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgaGFzT2JqZWN0VHlwZSA9IChudW1iZXJPZlNlcXVlbmNlVHlwZXMgKyBudW1i
ZXJPZkZyb3plbkFycmF5VHlwZXMgKyBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyArIG51bWJlck9m
UmVjb3JkVHlwZXMpID4gMDsKKworICAgIHVzaW5nIEludGVyZmFjZVR5cGVMaXN0ID0gYnJpZ2Fu
ZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5kOjpfMT4+OworCisgICAg
c3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIC8v
IDEuIElmIHRoZSB1bmlvbiB0eXBlIGluY2x1ZGVzIGEgbnVsbGFibGUgdHlwZSBhbmQgViBpcyBu
dWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCB2YWx1ZSBudWxsLgorICAgICAg
ICBjb25zdGV4cHIgYm9vbCBoYXNOdWxsVHlwZSA9IGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgc3Rk
Ojppc19zYW1lPElETE51bGwsIGJyaWdhbmQ6Ol8xPj46OnZhbHVlOworICAgICAgICBpZiAoaGFz
TnVsbFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+
KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIElETE51bGwsIGhhc051bGxUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyAyLiBMZXQgdHlwZXMgYmUgdGhlIGZsYXR0ZW5lZCBtZW1iZXIgdHlwZXMgb2YgdGhl
IHVuaW9uIHR5cGUuCisgICAgICAgIC8vIE5PVEU6IFVuaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHBy
ZS1mbGF0dGVudGVkLgorICAgICAgICAKKyAgICAgICAgLy8gMy4gSWYgViBpcyBudWxsIG9yIHVu
ZGVmaW5lZCB0aGVuOgorICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUgfHwgaGFzUmVjb3Jk
VHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBkaWN0aW9uYXJ5IHR5
cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlv
bmFyeSB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rp
b25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29y
ZCB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJl
Y29yZCB0eXBlLgorICAgICAgICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gNC4gSWYgViBpcyBhIHBsYXRmb3JtIG9iamVjdCwgdGhlbjoKKyAgICAg
ICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGFuIGludGVyZmFjZSB0eXBlIHRoYXQgViBp
bXBsZW1lbnRzLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2Ug
dG8gdGhlIG9iamVjdCBWLgorICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgb2Jq
ZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2UgdG8gdGhl
IG9iamVjdCBWLgorICAgICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9i
amVjdCBhbmQgc3RlcCA0LjIpCisgICAgICAgIGlmIChicmlnYW5kOjphbnk8VHlwZUxpc3QsIElz
SURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj46OnZhbHVlKSB7CisgICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPFJldHVyblR5cGU+IHJldHVyblZhbHVlOworICAgICAgICAgICAgYnJpZ2FuZDo6Zm9y
X2VhY2g8SW50ZXJmYWNlVHlwZUxpc3Q+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAg
ICAgIGlmIChyZXR1cm5WYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKKyAgICAgICAg
ICAgICAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1l
bnRhdGlvblR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgUmF3VHlwZSA9IHR5cGVuYW1lIFR5
cGU6OlJhd1R5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcgV3JhcHBlclR5cGUgPSB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8UmF3VHlwZT46OldyYXBwZXJDbGFzczsKKwor
ICAgICAgICAgICAgICAgIGF1dG8gY2FzdGVkVmFsdWUgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVk
KHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFjYXN0ZWRWYWx1ZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJl
dHVyblZhbHVlID0gUmV0dXJuVHlwZShJbXBsZW1lbnRhdGlvblR5cGUoY2FzdGVkVmFsdWUpKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUocmV0dXJuVmFsdWUudmFsdWUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igc3RlcHMgNSAtIDEw
LgorCisgICAgICAgIC8vIDExLiBJZiBWIGlzIGFueSBraW5kIG9mIG9iamVjdCwgdGhlbjoKKyAg
ICAgICAgaWYgKGhhc09iamVjdFR5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkgeworICAgICAgICAgICAgICAgIEpTQzo6SlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7
CisgICAgICAgICAgICAgICAgaWYgKGNlbGwtPmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIG9wdGltaXplIHRoZSBmb2xsb3dp
bmcgY29kZSBieSBtYWtpbmcgdXNlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBmYWN0
IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0LiAKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGluY2x1
ZGVzIGEgc2VxdWVuY2UgdHlwZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
ICAxLiBMZXQgbWV0aG9kIGJlIHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3Ip
LgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhv
ZCkuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1
bmRlZmluZWQsIHJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAgICBzZXF1ZW5jZSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzU2VxdWVu
Y2VUeXBlID0gbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA7CisgICAgICAgICAgICAgICAgICAg
IGlmIChoYXNTZXF1ZW5jZVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFz
SXRlcmF0b3IgPSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25k
aXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBTZXF1ZW5jZVR5cGUsIGhhc1NlcXVlbmNlVHlw
ZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGZy
b3plbiBhcnJheSB0eXBlLCB0aGVuOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEu
IExldCBtZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVm
aW5lZCwgcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgICAgIGZyb3plbiBhcnJheSBvZiB0aGF0IHR5cGUgZnJvbSBWIGFuZCBtZXRo
b2QuCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Zyb3plbkFycmF5VHlw
ZSA9IG51bWJlck9mRnJvemVuQXJyYXlUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaGFzRnJvemVuQXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhh
c0l0ZXJhdG9yID0gaGFzSXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29u
ZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRnJvemVuQXJyYXlUeXBlLCBoYXNGcm96ZW5B
cnJheVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyAgICAgMy4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBkaWN0aW9uYXJ5IHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgICAg
ICAgICAgICAgICAgLy8gICAgICAgIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlw
ZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4o
Q29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgRGljdGlvbmFyeVR5cGUsIGhhc0RpY3Rp
b25hcnlUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICA0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHJlY29yZCB0eXBlLCB0aGVu
IHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHJlY29yZCB0eXBlLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlv
bmFsQ29udmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
IDUuIElmIHR5cGVzIGluY2x1ZGVzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIHR5cGUsIHRoZW4gcmV0
dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgaW50ZXJmYWNlIHR5cGUuCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY2Fs
bGJhY2sgaW50ZXJmYWNlIHR5cGUgYW5kIHN0ZXAgMTIuNSkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDYuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhlIElETCB2
YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAg
MTIuNikKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyAxMi4gSWYgViBpcyBhIEJvb2xlYW4gdmFsdWUsIHRoZW46CisgICAgICAgIC8vICAg
ICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQg
b2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4uCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc0Jv
b2xlYW5UeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8SURMQm9vbGVh
biwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7CisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyAxMy4gSWYg
ViBpcyBhIE51bWJlciB2YWx1ZSwgdGhlbjoKKyAgICAgICAgLy8gICAgIDEuIElmIHR5cGVzIGlu
Y2x1ZGVzIGEgbnVtZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRp
bmcgViB0byB0aGF0IG51bWVyaWMgdHlwZS4KKyAgICAgICAgY29uc3RleHByIGJvb2wgaGFzTnVt
ZXJpY1R5cGUgPSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlICE9IDA7Cisg
ICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBh
cmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhh
c051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyAxNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzdHJpbmcgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCB0eXBlLgor
ICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTdHJpbmdUeXBlID0gYnJpZ2FuZDo6c2l6ZTxTdHJp
bmdUeXBlTGlzdD46OnZhbHVlICE9IDA7CisgICAgICAgIGlmIChoYXNTdHJpbmdUeXBlKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0
aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgU3RyaW5nVHlwZSwgaGFzU3RyaW5nVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAvLyAxNS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBudW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVy
dGluZyBWIHRvIHRoYXQgbnVtZXJpYyB0eXBlLgorICAgICAgICBpZiAoaGFzTnVtZXJpY1R5cGUp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTYuIElm
IHR5cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252
ZXJ0aW5nIFYgdG8gYm9vbGVhbi4KKyAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKQorICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTcuIFRocm93IGEgVHlw
ZUVycm9yLgorICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAg
cmV0dXJuIFJldHVyblR5cGUoKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IHsKKyAgICB1c2luZyBUeXBlID0g
SURMVW5pb248VC4uLj47CisgICAgdXNpbmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBl
TGlzdDsKKyAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBUeXBlOjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1
ZTsKKworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5k
OjpwdHJkaWZmX3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZh
bHVlPjsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0
aW9uVHlwZSYgdmFyaWFudCkKKyAgICB7CisgICAgICAgIGF1dG8gaW5kZXggPSB2YXJpYW50Lmlu
ZGV4KCk7CisKKyAgICAgICAgc3RkOjpvcHRpb25hbDxKU0M6OkpTVmFsdWU+IHJldHVyblZhbHVl
OworICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxTZXF1ZW5jZT4oWyZdKGF1dG8mJiB0eXBlKSB7
CisgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5j
ZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICBpZiAoSTo6dmFsdWUg
PT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+Pihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWUpOworICAg
ICAgICByZXR1cm4gcmV0dXJuVmFsdWUudmFsdWUoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAt
CisvLyBNQVJLOiBEYXRlIHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERh
dGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGRvdWJsZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlVG9EYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERhdGU+IHsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4ganNEYXRlKCZzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8v
IE1BUks6IElETEpTT04gdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMSlNP
Tj4gOiBEZWZhdWx0Q29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpKU09OU3RyaW5naWZ5KCZzdGF0ZSwgdmFsdWUsIDApOworICAgIH0K
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEpTT04+IHsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6SlNPTlBhcnNlKCZzdGF0ZSwgdmFsdWUpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNj
cmlwdFZhbHVlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2VyaWFsaXplZFNjcmlwdFZhbHVl
PFQ+PiB7CisgICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShz
dGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFJlZlB0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVl
LT5kZXNlcmlhbGl6ZShzdGF0ZSwgJmdsb2JhbE9iamVjdCkgOiBKU0M6OmpzTnVsbCgpOworICAg
IH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEV2ZW50IExpc3RlbmVyIHR5cGUKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiA6
IERlZmF1bHRDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4geworICAgIHVzaW5nIFJldHVy
blR5cGUgPSBSZWZQdHI8VD47CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
c3RhdGUudm0oKSk7CisKKyAgICAgICAgYXV0byBsaXN0ZW5lciA9IFQ6OmNyZWF0ZSh2YWx1ZSwg
dGhpc09iamVjdCwgZmFsc2UsIGN1cnJlbnRXb3JsZCgmc3RhdGUpKTsKKyAgICAgICAgaWYgKCFs
aXN0ZW5lcikKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
IAorICAgICAgICByZXR1cm4gbGlzdGVuZXI7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogWFBhdGhOU1Jlc29sdmVyIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IENvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExY
UGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+Owor
ICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25U
aHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAg
eworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBX
cmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoVU5M
SUtFTFkoIW9iamVjdCkpCisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETFhQYXRoTlNSZXNvbHZlcjxUPj4geworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6
Z2V0UHRyT3JSZWYodmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgor
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8g
TUFSSzogSURMSURCS2V5IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
SURCS2V5PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBV
JiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9Cit9OworCisjaWYgRU5BQkxFKFdFQkdM
KQorCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExXZWJHTEFueSB0eXBlCisKK3RlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETFdlYkdMQW55PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25z
dCBXZWJHTEFueSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydFRvSlNWYWx1
ZShzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAgfQorfTsKKworI2VuZGlmCisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IFN1cHBvcnQgZm9yIHZhcmlhZGljIHRhaWwgY29udmVydGlvbnMK
KworbmFtZXNwYWNlIERldGFpbCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAg
ICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SURMVHlwZT4gCisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZSB7CisgICAgICAgIHVz
aW5nIEl0ZW0gPSB0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICAg
ICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0g
PSBzdGF0ZS52bSgpOworICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgc3RkOjpudWxsb3B0KTsKKworICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0
cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMSW50ZXJmYWNlPFQ+PiB7CisgICAgICAgIHVz
aW5nIEl0ZW0gPSBzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFQ+OworCisgICAgICAgIHN0YXRpYyBz
dGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc3VsdCA9IENvbnZl
cnRlcjxJRExJbnRlcmZhY2U8VD4+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6b3B0aW9uYWw8SXRlbT4oKnJlc3VsdCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgVmFy
aWFkaWNDb252ZXJ0ZXIgOiBWYXJpYWRpY0NvbnZlcnRlckJhc2U8SURMVHlwZT4geworICAgICAg
ICB1c2luZyBJdGVtID0gdHlwZW5hbWUgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+OjpJ
dGVtOworICAgICAgICB1c2luZyBDb250YWluZXIgPSBWZWN0b3I8SXRlbT47CisKKyAgICAgICAg
c3RydWN0IFJlc3VsdCB7CisgICAgICAgICAgICBzaXplX3QgYXJndW1lbnRJbmRleDsKKyAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Q29udGFpbmVyPiBhcmd1bWVudHM7CisgICAgICAgIH07Cisg
ICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gdHlwZW5hbWUgRGV0YWlsOjpW
YXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6UmVzdWx0IGNvbnZlcnRWYXJpYWRpY0FyZ3VtZW50
cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIHNpemVfdCBzdGFydEluZGV4KQoreworICAgIHNpemVf
dCBsZW5ndGggPSBzdGF0ZS5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKHN0YXJ0SW5kZXggPiBs
ZW5ndGgpCisgICAgICAgIHJldHVybiB7IDAsIHN0ZDo6bnVsbG9wdCB9OworCisgICAgdHlwZW5h
bWUgRGV0YWlsOjpWYXJpYWRpY0NvbnZlcnRlcjxJRExUeXBlPjo6Q29udGFpbmVyIHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGggLSBzdGFydEluZGV4KTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSBzdGFydEluZGV4OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoc3RhdGUsIHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB7IGksIHN0ZDo6bnVsbG9wdCB9OworICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoKnZhbHVlKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHsgbGVuZ3RoLCBXVEZNb3ZlKHJlc3VsdCkgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRX
ZWJHTC5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnRXZWJHTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNzk4ICsyNSwxMiBAQAog
CiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkJ1ZmZlclNvdXJjZS5oIgotI2luY2x1ZGUgIklE
QkJpbmRpbmdVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJJRExUeXBlcy5oIgotI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKLSNpbmNs
dWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNPTk9iamVjdC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIENvbnZlcnNpb24gZnJv
bSBKU1ZhbHVlIC0+IEltcGxlbWVudGF0aW9uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyOwotCi1lbnVtIGNsYXNzIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiB7
IE5vcm1hbCwgRW5mb3JjZVJhbmdlLCBDbGFtcCB9OwotZW51bSBjbGFzcyBTdHJpbmdDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiB7IE5vcm1hbCwgVHJlYXROdWxsQXNFbXB0eVN0cmluZyB9OwotCi1z
dHJ1Y3QgRGVmYXVsdEV4Y2VwdGlvblRocm93ZXIgewotICAgIHZvaWQgb3BlcmF0b3IoKShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi0gICAgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSlNDOjpKU09iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlwZW5hbWUg
Q29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyPiB0eXBlbmFtZSBD
b252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTT2JqZWN0JiwgRXhjZXB0
aW9uVGhyb3dlciYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRo
cm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEV4Y2VwdGlvblRocm93
ZXImJik7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdlbmVyYXRlZCBjb2RlIGZvciBJREwgZGljdGlv
bmFyeSBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0RGljdGlvbmFy
eShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFNwZWNpYWxpemVkIGJ5IGdl
bmVyYXRlZCBjb2RlIGZvciBJREwgZW51bWVyYXRpb24gY29udmVyc2lvbi4KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0ZDo6b3B0aW9uYWw8VD4gcGFyc2VFbnVtZXJhdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnRFbnVtZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdCBjaGFyKiBleHBlY3RlZEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRl
LCB2YWx1ZSwgdGhpc09iamVjdCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0
eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xv
YmFsT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwg
Y29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFt
ZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1
ZSwgY29uZmlndXJhdGlvbik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0
aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxU
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXI+IGlubGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIp
Ci17Ci0gICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIHRoaXNP
YmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihleGNlcHRpb25UaHJvd2VyKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IGlu
bGluZSB0eXBlbmFtZSBDb252ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi17Ci0gICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotLy8g
Q29udmVyc2lvbiBmcm9tIEltcGxlbWVudGF0aW9uIC0+IEpTVmFsdWUKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBV
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYpOwotdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlv
bk9yPFU+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBVJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmpl
Y3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLQotLy8gU3BlY2lhbGl6
ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1N0cmluZyogY29udmVydEVudW1lcmF0aW9uVG9KUyhK
U0M6OkV4ZWNTdGF0ZSYsIFQpOwotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGJvb2wgbmVlZHNT
dGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlLCBib29sIG5lZWRzR2xvYmFsT2JqZWN0
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzR2xvYmFsT2JqZWN0Pgotc3RydWN0IEpTQ29udmVydGVy
T3ZlcmxvYWRlcjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92
ZXJsb2FkZXI8VCwgdHJ1ZSwgdHJ1ZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpT
Q29udmVydGVyT3ZlcmxvYWRlcjxULCB0cnVlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIGZhbHNlLCBmYWxzZT4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIFUmJiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUm
JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmIHZhbHVlKQotewotICAg
IHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBK
U0NvbnZlcnRlck92ZXJsb2FkZXI8VD46OmNvbnZlcnQoc3RhdGUsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8
VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7
Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdG9KUzxUPihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0
ZXI8VD46OmNvbnZlcnROZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VT4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZDxUPihzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRDb252ZXJ0ZXIgewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0
eXBlbmFtZSBUOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJL
OiBBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQW55PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IEpTQzo6SlNWYWx1
ZTsKLSAgICAKLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IEpTQzo6U3Ryb25nPEpT
Qzo6VW5rbm93bj4mIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmdldCgpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEFueT4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpKU1ZhbHVlJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzog
TnVsbGFibGUgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJRExUeXBlPgotICAgIHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgSURMVHlwZT4gCi0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5
cGUgewotICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTnVsbGFibGU8SURMVHlwZT46
OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZTxJRExJbnRlcmZhY2U8VD4+IHsKLSAg
ICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+OjpS
ZXR1cm5UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IE51bGxhYmxl
Q29udmVyc2lvblR5cGU8SURMQW55PiB7Ci0gICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBD
b252ZXJ0ZXI8SURMQW55Pjo6UmV0dXJuVHlwZTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETE51bGxhYmxlPFQ+PiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMTnVsbGFibGU8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0
YWlsOjpOdWxsYWJsZUNvbnZlcnNpb25UeXBlPFQ+OjpUeXBlOwotICAgIAotICAgIC8vIDEuIElm
IFR5cGUoVikgaXMgbm90IE9iamVjdCwgYW5kIHRoZSBjb252ZXJzaW9uIHRvIGFuIElETCB2YWx1
ZSBpcyBiZWluZyBwZXJmb3JtZWQKLSAgICAvLyBkdWUgdG8gViBiZWluZyBhc3NpZ25lZCB0byBh
biBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIG51bGxhYmxlIGNhbGxiYWNrIGZ1bmN0aW9uCi0g
ICAgLy8gdGhhdCBpcyBhbm5vdGF0ZWQgd2l0aCBbVHJlYXROb25PYmplY3RBc051bGxdLCB0aGVu
IHJldHVybiB0aGUgSURMIG51bGxhYmxlIHR5cGUgVD8KLSAgICAvLyB2YWx1ZSBudWxsLgotICAg
IC8vCi0gICAgLy8gTk9URTogSGFuZGxlZCBlbHNld2hlcmUuCi0gICAgLy8KLSAgICAvLyAyLiBP
dGhlcndpc2UsIGlmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwg
bnVsbGFibGUgdHlwZSBUPyB2YWx1ZSBudWxsLgotICAgIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHVzaW5nIHRoZSBydWxlcyBmb3IgdGhlIGlubmVy
IElETCB0eXBlIFQuCi0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7
Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSwgdGhpc09iamVjdCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAg
ICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVj
dCk7Ci0gICAgfQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVy
biBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAg
ICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dl
cikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVydGVyPFQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4
Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2Vy
KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0aGlzT2JqZWN0LCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9u
VGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYm
IGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0
dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGdsb2JhbE9iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTnVsbGFibGU8
VD4+IHsKLSAgICB1c2luZyBJbXBsZW1lbnRhdGlvblR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJs
ZTxUPjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNTdGF0ZTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxP
YmplY3Q7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUo
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVy
biBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFs
dWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZhbHVlKSk7Ci0gICAgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgaWYgKFQ6OmlzTnVsbFZhbHVlKHZhbHVlKSkKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgICAgICByZXR1cm4gSlNDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIGdsb2JhbE9iamVjdCwgVDo6ZXh0cmFjdFZhbHVlRnJvbU51bGxhYmxlKHZh
bHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAgICAgICBp
ZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci19Owot
Ci0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsIHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETE51bGw+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGlj
IHN0ZDo6bnVsbHB0cl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChzdGQ6Om51
bGxwdHJfdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIH0KLX07
Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEJvb2xlYW4gdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMQm9vbGVhbj4gOiBEZWZhdWx0Q29udmVydGVyPElETEJvb2xlYW4+IHsK
LSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvQm9vbGVhbigmc3RhdGUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJvb2xlYW4+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGJvb2wgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gSlNDOjpqc0Jvb2xlYW4odmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIEFycmF5QnVmZmVyIHN1
cHBvcnQuCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlND
OjpBcnJheUJ1ZmZlcj4gewotICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1
ZmZlcjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gSlNDOjpBcnJheUJ1ZmZlcio7
Ci19OwotCi0vLyBBcnJheUJ1ZmZlclZpZXcgc3VwcG9ydC4KLXRlbXBsYXRlPD4gc3RydWN0IEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVmZmVyVmlldz4gewotICAgIHVz
aW5nIFdyYXBwZXJDbGFzcyA9IEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc7Ci0gICAgdXNpbmcgVG9X
cmFwcGVkUmV0dXJuVHlwZSA9IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+OwotfTsKLQotLy8gVHlw
ZWQgYXJyYXlzIHN1cHBvcnQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiBzdHJ1Y3QgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+PiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5
VmlldzxBZGFwdG9yPjsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1cm5UeXBlID0gUmVmUHRyPEpT
Qzo6R2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0b3I+PjsKLX07Ci0KLS8vIE1BUks6IC0KLS8v
IE1BUks6IEludGVyZmFjZSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxUPjo6VG9XcmFwcGVkUmV0dXJuVHlwZTsKLSAgICB1c2luZyBXcmFwcGVyVHlwZSA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNzOwot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRp
b25UaHJvd2VyPgotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25U
aHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2
bSwgdmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIW9iamVjdCkpCi0gICAgICAgICAgICBl
eGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBvYmplY3Q7Ci0g
ICAgfQotfTsKLQotbmFtZXNwYWNlIERldGFpbCB7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgVCogcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUKj4o
cCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3Qg
VCYgcCkgeyByZXR1cm4gY29uc3RfY2FzdDxUJj4ocCk7IH0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
PiBpbmxpbmUgVCogZ2V0UHRyT3JSZWYoY29uc3QgUmVmUHRyPFQ+JiBwKSB7IHJldHVybiBwLmdl
dCgpOyB9Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5lIFQmIGdldFB0ck9yUmVmKGNvbnN0
IFJlZjxUPiYgcCkgeyByZXR1cm4gcC5nZXQoKTsgfQotCi19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9y
UmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IElu
dGVnZXIgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEJ5dGU+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExCeXRlPiB7Ci0gICAgc3RhdGljIGludDhfdCBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDhFbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OENsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvSW50OChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGU+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMQnl0ZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1i
ZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExP
Y3RldD4gOiBEZWZhdWx0Q29udmVydGVyPElETE9jdGV0PiB7Ci0gICAgc3RhdGljIHVpbnQ4X3Qg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OEVu
Zm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50OENsYW1wKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDgoc3RhdGUsIHZh
bHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExPY3Rl
dD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExPY3RldDo6SW1wbGVtZW50YXRpb25U
eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExTaG9ydD4gOiBEZWZhdWx0Q29udmVydGVyPElETFNob3J0PiB7Ci0g
ICAgc3RhdGljIGludDE2X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24g
PSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAg
ICByZXR1cm4gdG9JbnQxNkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1
cm4gdG9JbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHRvSW50MTYoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExTaG9ydD4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExTaG9y
dDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4gewotICAgIHN0YXRpYyB1aW50MTZfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkVuZm9y
Y2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MTZDbGFtcChzdGF0
ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b1VJbnQxNihzdGF0ZSwgdmFs
dWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2ln
bmVkU2hvcnQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRTaG9ydDo6
SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMTG9uZz4gewotICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50MzJfdCBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyRW5m
b3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDMyQ2xhbXAoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUudG9JbnQzMigmc3Rh
dGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETExvbmc+
IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9uZzo6SW1wbGVtZW50YXRpb25UeXBl
OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25l
ZExvbmc+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50MzJFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDMyQ2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWUudG9VSW50MzIoJnN0YXRlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmc+IHsKLSAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETExvbmdMb25nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICBz
dGF0aWMgaW50NjRfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0K
LSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHJldHVybiB0b0ludDY0RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
ICAgIHJldHVybiB0b0ludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdG9JbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpTQ29udmVydGVyPElETExvbmdMb25nPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETExvbmdMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252
ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVk
TG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAg
c3RhdGljIHVpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigp
OwotCi0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgICAgICByZXR1cm4gdG9VSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIHRvVUludDY0Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9VSW50NjQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExVbnNpZ25lZExvbmdMb25nPiB7Ci0gICAgdXNp
bmcgVHlwZSA9IHR5cGVuYW1lIElETFVuc2lnbmVkTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBN
QVJLOiBGbG9hdGluZyBwb2ludCB0eXBlcwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRlcjxJRExGbG9hdD4gewotCi0gICAgc3RhdGljIGlu
bGluZSBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obnVtYmVy
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmxvYXQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
ICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICAgICAg
aWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETEZsb2F0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IHsKLSAgICBzdGF0aWMgaW5saW5lIGZs
b2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVt
YmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0Pih2YWx1ZS50b051bWJlcigmc3RhdGUpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnJlc3RyaWN0ZWRGbG9hdDo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZl
cnRlcjxJRExEb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExEb3VibGU+IHsKLSAgICBzdGF0
aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJS0VM
WSghc3RkOjppc2Zpbml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRvdWJs
ZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtFTFko
IXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVtYmVyOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETERvdWJsZT4gewotICAgIHVzaW5nIFR5
cGUgPSB0eXBlbmFtZSBJRExEb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91
YmxlPiB7Ci0gICAgc3RhdGljIGlubGluZSBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
bnVtYmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFt
ZSBJRExVbnJlc3RyaWN0ZWREb3VibGU6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1Zh
bHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBBZGQgb3ZlcmxvYWQgZm9yIE1lZGlhVGltZS4K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoTWVkaWFUaW1lIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUudG9Eb3VibGUoKSk7Ci0gICAgfQot
fTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogU3RyaW5nIHR5cGVzCi0KLXRlbXBsYXRlPD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExET01TdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExET01TdHJp
bmc+IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAg
ICAgICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OlRyZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvV1RGU3RyaW5nKCZz
dGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRE9N
U3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5nV2l0
aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCeXRlU3RyaW5nPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4g
ewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAg
ICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb0J5dGVTdHJpbmcoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExC
eXRlU3RyaW5nPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzU3RyaW5n
V2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVU1ZTdHJpbmc+
IHsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24gPSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgaWYgKGNvbmZpZ3VyYXRpb24gPT0gU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OlRy
ZWF0TnVsbEFzRW1wdHlTdHJpbmcgJiYgdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlVG9VU1ZTdHJpbmcoc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExV
U1ZTdHJpbmc+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdX
aXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogT2JqZWN0IHR5cGUKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9iamVjdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETE9iamVjdD4gewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgSlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
ICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93
ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiB7IHZtLCBKU0M6OmFzT2JqZWN0KHZhbHVlKSB9OwotICAg
IH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFycmF5LWxpa2UgdHlwZXMKLQotbmFtZXNw
YWNlIERldGFpbCB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3Qg
R2VuZXJpY1NlcXVlbmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFZl
Y3Rvcjx0eXBlbmFtZSBJRExUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU+OwotCi0gICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0KiBqc09iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7
Ci0gICAgICAgICAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIGpzT2JqZWN0LCBbJnJlc3Vs
dF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFs
dWUpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElE
TFR5cGU+Ojpjb252ZXJ0KCpzdGF0ZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZSkpOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIC8vIFNwZWNpYWxpemF0aW9uIGZvciBudW1lcmljIHR5cGVzCi0gICAgLy8g
RklYTUU6IFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIElETEZsb2F0aW5nUG9pbnRU
eXBlcyBhbmQgSURMTG9uZy4gVG8gYWRkCi0gICAgLy8gc3VwcG9ydCBmb3IgbW9yZSBudW1lcmlj
IHR5cGVzLCBhZGQgYW4gb3ZlcmxvYWQgb2YgQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0IHRo
YXQKLSAgICAvLyB0YWtlcyBhbiBFeGVjU3RhdGUsIFRocm93U2NvcGUsIGRvdWJsZSBhcyBpdHMg
YXJndW1lbnRzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IE51
bWVyaWNTZXF1ZW5jZUNvbnZlcnRlciB7Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIg
PSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVy
blR5cGUgPSB0eXBlbmFtZSBHZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0o
KTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJh
eShvYmplY3QpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252
ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
SlNDOjphc0FycmF5KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmpl
Y3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmpl
Y3QpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0K
LSAgICAgICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUg
PSBhcnJheS0+aW5kZXhpbmdUeXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29u
dGlndW91cygpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKDApOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29u
dmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkludDMyU2hhcGUpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgp
LT5jb250aWd1b3VzSW50MzIoKVtpXS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpbmRleFZhbHVlIHx8IGluZGV4VmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChpbmRleFZhbHVlLmFzSW50MzIoKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpEb3VibGVTaGFw
ZSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gYXJyYXktPmJ1dHRl
cmZseSgpLT5jb250aWd1b3VzRG91YmxlKClbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChz
dGQ6OmlzbmFuKGRvdWJsZVZhbHVlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6
Y29udmVydChzdGF0ZSwgc2NvcGUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGF1dG8gaW5kZXhWYWx1ZSA9IGFy
cmF5LT5nZXREaXJlY3RJbmRleCgmc3RhdGUsIGkpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBp
bmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC51bmNoZWNrZWRBcHBlbmQoY29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VD
b252ZXJ0ZXIgewotICAgICAgICB1c2luZyBHZW5lcmljQ29udmVydGVyID0gR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETFR5cGU+OwotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5h
bWUgR2VuZXJpY0NvbnZlcnRlcjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2Jq
ZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIGlmICghSlNDOjppc0pTQXJyYXkob2JqZWN0KSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2Jq
ZWN0KTsKLQotICAgICAgICAgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IEpTQzo6YXNBcnJheShv
YmplY3QpOwotICAgICAgICAgICAgaWYgKCFhcnJheS0+Z2xvYmFsT2JqZWN0KCktPmlzQXJyYXlJ
dGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJpY0NvbnZlcnRlcjo6Y29udmVydChzdGF0ZSwgb2JqZWN0KTsKLQotICAgICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOwotCi0gICAgICAgICAgICBS
ZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnRyeVJlc2VydmVDYXBh
Y2l0eShsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZSByaWdodCBl
eGNlcHRpb24gdG8gdGhyb3c/Ci0gICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgSlNDOjpJbmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlID0gYXJyYXktPmluZGV4
aW5nVHlwZSgpICYgSlNDOjpJbmRleGluZ1NoYXBlTWFzazsKLQotICAgICAgICAgICAgaWYgKGlu
ZGV4aW5nVHlwZSA9PSBKU0M6OkNvbnRpZ3VvdXNTaGFwZSkgewotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3VvdXMoKVtpXS5n
ZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmRleFZhbHVlKQotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6anNVbmRlZmluZWQoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBpbmRleFZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVj
a2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBp
bmRleFZhbHVlID0gYXJyYXktPmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAg
IGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhWYWx1ZSA9IEpTQzo6
anNVbmRlZmluZWQoKTsKLQotICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBD
b252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUpOwotICAgICAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
TG9uZz4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8
SURMTG9uZz46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETEZsb2F0PiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxh
dGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4g
ewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6UmV0dXJuVHlwZTsKLQotICAgICAgICBzdGF0
aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVlbmNlQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252
ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMRG91YmxlPjo6UmV0dXJuVHlwZTsKLQotICAgICAg
ICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyPElETERvdWJsZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVy
PElETFVucmVzdHJpY3RlZERvdWJsZT4gewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlw
ZW5hbWUgR2VuZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OlJl
dHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUg
RGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExTZXF1ZW5jZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0
b3IpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZWxlbWVudCkpOwotICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheSgmZXhlYywgbnVs
bHB0ciwgJmdsb2JhbE9iamVjdCwgbGlzdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEZyb3plbkFycmF5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46OlJldHVyblR5cGU7Ci0KLSAgICBzdGF0aWMg
UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIERldGFpbDo6U2VxdWVuY2VDb252ZXJ0ZXI8VD46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRnJvemVuQXJyYXk8VD4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFZlY3RvcjxVLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDog
dmVjdG9yKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUzxUPihleGVjLCBnbG9iYWxPYmpl
Y3QsIGVsZW1lbnQpKTsKLSAgICAgICAgYXV0byogYXJyYXkgPSBKU0M6OmNvbnN0cnVjdEFycmF5
KCZleGVjLCBudWxscHRyLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKLSAgICAgICAgcmV0dXJuIEpT
Qzo6b2JqZWN0Q29uc3RydWN0b3JGcmVlemUoJmV4ZWMsIGFycmF5KTsKLSAgICB9Ci19OwotCi0v
LyBNQVJLOiAtCi0vLyBNQVJLOiBSZWNvcmQgdHlwZQotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExTdHJpbmdUeXBlPgotICAgIHN0cnVjdCBJZGVudGlmaWVy
Q29udmVydGVyOwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRlcjxJ
RExET01TdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gaWRlbnRpZmllclRvQnl0ZVN0cmluZyhzdGF0ZSwgaWRlbnRpZmllcik7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSWRlbnRpZmllckNvbnZlcnRl
cjxJRExVU1ZTdHJpbmc+IHsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gaWRlbnRpZmllclRvVVNWU3RyaW5nKHN0YXRlLCBpZGVu
dGlmaWVyKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEssIHR5
cGVuYW1lIFY+IHN0cnVjdCBDb252ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiA6IERlZmF1bHRDb252
ZXJ0ZXI8SURMUmVjb3JkPEssIFY+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1l
IElETFJlY29yZDxLLCBWPjo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgIHVzaW5nIEtleVR5cGUg
PSB0eXBlbmFtZSBLOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgVmFsdWVUeXBlID0g
dHlwZW5hbWUgVjo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSBu
ZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LgotICAgICAgICAvLyAyLiBJZiBUeXBl
KE8pIGlzIFVuZGVmaW5lZCBvciBOdWxsLCByZXR1cm4gcmVzdWx0LgotICAgICAgICBpZiAodmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAg
IAotICAgICAgICAvLyAzLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVy
cm9yLgotICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7Ci0gICAgCi0gICAgICAgIFJldHVyblR5cGUgcmVzdWx0OwotICAgIAotICAg
ICAgICAvLyA0LiBMZXQga2V5cyBiZSA/IE8uW1tPd25Qcm9wZXJ0eUtleXNdXSgpLgotICAgICAg
ICBKU0M6OlByb3BlcnR5TmFtZUFycmF5IGtleXMoJnZtLCBKU0M6OlByb3BlcnR5TmFtZU1vZGU6
OlN0cmluZ3MpOwotICAgICAgICBvYmplY3QtPmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCAm
c3RhdGUsIGtleXMsIEpTQzo6RW51bWVyYXRpb25Nb2RlKCkpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgIC8vIDUuIFJlcGVhdCwgZm9yIGVhY2gg
ZWxlbWVudCBrZXkgb2Yga2V5cyBpbiBMaXN0IG9yZGVyOgotICAgICAgICBmb3IgKGF1dG8mIGtl
eSA6IGtleXMpIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blBy
b3BlcnR5XV0oa2V5KS4KLSAgICAgICAgICAgIEpTQzo6UHJvcGVydHlEZXNjcmlwdG9yIGRlc2Ny
aXB0b3I7Ci0gICAgICAgICAgICBib29sIGRpZEdldERlc2NyaXB0b3IgPSBvYmplY3QtPmdldE93
blByb3BlcnR5RGVzY3JpcHRvcigmc3RhdGUsIGtleSwgZGVzY3JpcHRvcik7Ci0gICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICBpZiAoIWRp
ZEdldERlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IC8vIDIuIElmIGRlc2MgaXMgbm90IHVuZGVmaW5lZCBhbmQgZGVzYy5bW0VudW1lcmFibGVdXSBp
cyB0cnVlOgotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0
byBjaGVjayBmb3IgZW51bWVyYWJsZSAvIHVuZGVmaW5lZCwgb3IgaXMgdGhpcyBoYW5kbGVkIGJ5
IHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICAvLyBlbnVtZXJhdGlvbiBtb2RlPwotCi0gICAgICAg
ICAgICBpZiAoIWRlc2NyaXB0b3IudmFsdWUoKS5pc1VuZGVmaW5lZCgpICYmIGRlc2NyaXB0b3Iu
ZW51bWVyYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtl
eSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy4KLSAgICAgICAgICAgICAgICBh
dXRvIHR5cGVkS2V5ID0gRGV0YWlsOjpJZGVudGlmaWVyQ29udmVydGVyPEs+Ojpjb252ZXJ0KHN0
YXRlLCBrZXkpOwotCi0gICAgICAgICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8s
IGtleSkuCi0gICAgICAgICAgICAgICAgYXV0byBzdWJWYWx1ZSA9IG9iamVjdC0+Z2V0KCZzdGF0
ZSwga2V5KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OwotCi0gICAgICAgICAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVy
dGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuCi0gICAgICAgICAgICAgICAgYXV0byB0eXBl
ZFZhbHVlID0gQ29udmVydGVyPFY+Ojpjb252ZXJ0KHN0YXRlLCBzdWJWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyA0LiBJZiB0eXBlZEtleSBpcyBhbHJlYWR5IGEga2V5IGlu
IHJlc3VsdCwgc2V0IGl0cyB2YWx1ZSB0byB0eXBlZFZhbHVlLgotICAgICAgICAgICAgICAgIC8v
IE5vdGU6IFRoaXMgY2FuIGhhcHBlbiB3aGVuIE8gaXMgYSBwcm94eSBvYmplY3QuCi0gICAgICAg
ICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBhcHBlbmQgdG8gcmVzdWx0IGEgbWFwcGlu
ZyAodHlwZWRLZXksIHR5cGVkVmFsdWUpLgotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
eyB0eXBlZEtleSwgdHlwZWRWYWx1ZSB9KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIDYuIFJldHVybiByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4gc3RydWN0IEpTQ29udmVy
dGVyPElETFJlY29yZDxLLCBWPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0
YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3Qg
PSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTWFwVHlwZT4KLSAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBNYXBUeXBlJiBtYXApCi0gICAgewotICAgICAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgCi0gICAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgISBP
YmplY3RDcmVhdGUoJU9iamVjdFByb3RvdHlwZSUpLgotICAgICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSk7Ci0gICAgICAgIAotICAgICAgICAvLyAyLiBSZXBl
YXQsIGZvciBlYWNoIG1hcHBpbmcgKGtleSwgdmFsdWUpIGluIEQ6Ci0gICAgICAgIGZvciAoY29u
c3QgYXV0byYga2V5VmFsdWVQYWlyIDogbWFwKSB7Ci0gICAgICAgICAgICAvLyAxLiBMZXQgZXNL
ZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVlLgotICAgICAgICAgICAg
Ly8gTm90ZSwgdGhpcyBzdGVwIGlzIG5vdCByZXF1aXJlZCwgYXMgd2UgbmVlZCB0aGUga2V5IHRv
IGJlCi0gICAgICAgICAgICAvLyBhbiBJZGVudGlmaWVyLCBub3QgYSBKU1ZhbHVlLgotCi0gICAg
ICAgICAgICAvLyAyLiBMZXQgZXNWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gRUNNQVNj
cmlwdCB2YWx1ZS4KLSAgICAgICAgICAgIGF1dG8gZXNWYWx1ZSA9IHRvSlM8Vj4oc3RhdGUsIGds
b2JhbE9iamVjdCwga2V5VmFsdWVQYWlyLnZhbHVlKTsKLQotICAgICAgICAgICAgLy8gMy4gTGV0
IGNyZWF0ZWQgYmUgISBDcmVhdGVEYXRhUHJvcGVydHkocmVzdWx0LCBlc0tleSwgZXNWYWx1ZSku
Ci0gICAgICAgICAgICBib29sIGNyZWF0ZWQgPSByZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwga2V5VmFsdWVQYWlyLmtleSksIGVzVmFsdWUpOwot
Ci0gICAgICAgICAgICAvLyA0LiBBc3NlcnQ6IGNyZWF0ZWQgaXMgdHJ1ZS4KLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoY3JlYXRlZCwgY3JlYXRlZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyAzLiBSZXR1cm4gcmVzdWx0LgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0K
LS8vIE1BUks6IC0KLS8vIE1BUks6IERpY3Rpb25hcnkgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExEaWN0aW9uYXJ5PFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFQ7Ci0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnREaWN0aW9uYXJ5PFQ+KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETERpY3Rpb25hcnk8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gdHJ1ZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQm
IGRpY3Rpb25hcnkpCi0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnlUb0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsIGRpY3Rpb25hcnkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IEVudW1lcmF0aW9uIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IENvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETEVu
dW1lcmF0aW9uPFQ+PiB7Ci0gICAgc3RhdGljIFQgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RW51
bWVyYXRpb248VD4oc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248VD4+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIFQgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29udmVydEVudW1lcmF0aW9uVG9KUyhleGVjLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogQ2FsbGJhY2sgZnVuY3Rpb24gdHlwZQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IDogRGVm
YXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0aW9uPFQ+PiB7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0
YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uVGhyb3dl
ciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoIXZhbHVlLmlzRnVuY3Rpb24oKSkgewot
ICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0Z1bmN0
aW9uPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKERldGFpbDo6Z2V0
UHRyT3JSZWYodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChVJiYgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGQ6OmZvcndhcmQ8VT4odmFsdWUp
KTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBDYWxsYmFjayBpbnRlcmZhY2Ug
dHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETENhbGxiYWNr
SW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8VD4+
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2Vw
dGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93
ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gVDo6Y3JlYXRlKEpTQzo6YXNPYmplY3QodmFsdWUpLCAmZ2xvYmFsT2JqZWN0KTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQ2Fs
bGJhY2tJbnRlcmZhY2U8VD4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KGNvbnN0IFUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMo
RGV0YWlsOjpnZXRQdHJPclJlZih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFVuaW9uIHR5
cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVCwgYm9vbCBlbmFi
bGVkPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZSBUPgotc3RydWN0IENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFQsIHRydWU+IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIFJldHVyblR5cGUoQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVu
YW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwgZmFsc2U+
IHsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICB9Ci19OwotCi1uYW1lc3BhY2UgRGV0YWlsIHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMaXN0LCBib29sIGNvbmRpdGlvbj4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3Q+Ci0gICAgc3RydWN0IENvbmRpdGlvbmFsRnJvbnQ8
TGlzdCwgdHJ1ZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUgPSBicmlnYW5kOjpmcm9udDxM
aXN0PjsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3Qg
Q29uZGl0aW9uYWxGcm9udDxMaXN0LCBmYWxzZT4KLSAgICB7Ci0gICAgICAgIHVzaW5nIHR5cGUg
PSB2b2lkOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJvb2wgY29uZGl0
aW9uPgotdXNpbmcgQ29uZGl0aW9uYWxGcm9udCA9IHR5cGVuYW1lIERldGFpbDo6Q29uZGl0aW9u
YWxGcm9udDxMaXN0LCBjb25kaXRpb24+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuaW9uPFQuLi4+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURM
VW5pb248VC4uLj4+IHsKLSAgICB1c2luZyBUeXBlID0gSURMVW5pb248VC4uLj47Ci0gICAgdXNp
bmcgVHlwZUxpc3QgPSB0eXBlbmFtZSBUeXBlOjpUeXBlTGlzdDsKLSAgICB1c2luZyBSZXR1cm5U
eXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgdXNpbmcgTnVt
ZXJpY1R5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETE51bWJlcjxicmln
YW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mTnVtZXJpY1R5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNf
YXNzZXJ0KG51bWJlck9mTnVtZXJpY1R5cGVzID09IDAgfHwgbnVtYmVyT2ZOdW1lcmljVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgbnVtZXJpYyB0eXBlcyBpbiBhbiBJRExVbmlvbi4i
KTsKLSAgICB1c2luZyBOdW1lcmljVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8TnVtZXJpY1R5cGVM
aXN0LCBudW1iZXJPZk51bWVyaWNUeXBlcyAhPSAwPjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBhbHNvIGNoZWNrIGZvciBJRExFbnVtZXJhdGlvbjxUPi4KLSAgICB1c2luZyBTdHJpbmdU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgc3RkOjppc19iYXNlX29mPElETFN0
cmluZywgYnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJP
ZlN0cmluZ1R5cGVzID0gYnJpZ2FuZDo6c2l6ZTxTdHJpbmdUeXBlTGlzdD46OnZhbHVlOwotICAg
IHN0YXRpY19hc3NlcnQobnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAwIHx8IG51bWJlck9mU3RyaW5n
VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc3RyaW5nIHR5cGVzIGluIGFuIElETFVu
aW9uLiIpOwotICAgIHVzaW5nIFN0cmluZ1R5cGUgPSBDb25kaXRpb25hbEZyb250PFN0cmluZ1R5
cGVMaXN0LCBudW1iZXJPZlN0cmluZ1R5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgU2VxdWVuY2VU
eXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExTZXF1ZW5jZTxicmlnYW5k
OjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU2VxdWVuY2VUeXBl
cyA9IGJyaWdhbmQ6OnNpemU8U2VxdWVuY2VUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19h
c3NlcnQobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID09IDAgfHwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVz
ID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIHNlcXVlbmNlIHR5cGVzIGluIGFuIElETFVuaW9u
LiIpOwotICAgIHVzaW5nIFNlcXVlbmNlVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U2VxdWVuY2VU
eXBlTGlzdCwgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRnJvemVu
QXJyYXlUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExGcm96ZW5BcnJh
eTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mRnJv
emVuQXJyYXlUeXBlcyA9IGJyaWdhbmQ6OnNpemU8RnJvemVuQXJyYXlUeXBlTGlzdD46OnZhbHVl
OwotICAgIHN0YXRpY19hc3NlcnQobnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDAgfHwgbnVt
YmVyT2ZGcm96ZW5BcnJheVR5cGVzID09IDEsICJUaGVyZSBjYW4gYmUgMCBvciAxIEZyb3plbkFy
cmF5IHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVzaW5nIEZyb3plbkFycmF5VHlwZSA9
IENvbmRpdGlvbmFsRnJvbnQ8RnJvemVuQXJyYXlUeXBlTGlzdCwgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICE9IDA+OwotCi0gICAgdXNpbmcgRGljdGlvbmFyeVR5cGVMaXN0ID0gYnJpZ2FuZDo6
ZmlsdGVyPFR5cGVMaXN0LCBJc0lETERpY3Rpb25hcnk8YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZkRpY3Rpb25hcnlUeXBlcyA9IGJyaWdhbmQ6OnNp
emU8RGljdGlvbmFyeVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1iZXJP
ZkRpY3Rpb25hcnlUeXBlcyA9PSAwIHx8IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID09IDEsICJU
aGVyZSBjYW4gYmUgMCBvciAxIGRpY3Rpb25hcnkgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc0RpY3Rpb25hcnlUeXBlID0gbnVtYmVyT2ZEaWN0
aW9uYXJ5VHlwZXMgIT0gMDsKLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZSA9IENvbmRpdGlvbmFs
RnJvbnQ8RGljdGlvbmFyeVR5cGVMaXN0LCBoYXNEaWN0aW9uYXJ5VHlwZT47Ci0KLSAgICB1c2lu
ZyBSZWNvcmRUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwgSXNJRExSZWNvcmQ8
YnJpZ2FuZDo6XzE+PjsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlY29y
ZFR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxSZWNvcmRUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRp
Y19hc3NlcnQobnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAwIHx8IG51bWJlck9mUmVjb3JkVHlwZXMg
PT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgcmVjb3JkIHR5cGVzIGluIGFuIElETFVuaW9uLiIp
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBoYXNSZWNvcmRUeXBlID0gbnVtYmVyT2ZSZWNv
cmRUeXBlcyAhPSAwOwotICAgIHVzaW5nIFJlY29yZFR5cGUgPSBDb25kaXRpb25hbEZyb250PFJl
Y29yZFR5cGVMaXN0LCBoYXNSZWNvcmRUeXBlPjsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBoYXNPYmplY3RUeXBlID0gKG51bWJlck9mU2VxdWVuY2VUeXBlcyArIG51bWJlck9mRnJvemVu
QXJyYXlUeXBlcyArIG51bWJlck9mRGljdGlvbmFyeVR5cGVzICsgbnVtYmVyT2ZSZWNvcmRUeXBl
cykgPiAwOwotCi0gICAgdXNpbmcgSW50ZXJmYWNlVHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8
VHlwZUxpc3QsIElzSURMSW50ZXJmYWNlPGJyaWdhbmQ6Ol8xPj47Ci0KLSAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gSWYgdGhl
IHVuaW9uIHR5cGUgaW5jbHVkZXMgYSBudWxsYWJsZSB0eXBlIGFuZCBWIGlzIG51bGwgb3IgdW5k
ZWZpbmVkLCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIG51bGwuCi0gICAgICAgIGNvbnN0ZXhw
ciBib29sIGhhc051bGxUeXBlID0gYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBzdGQ6OmlzX3NhbWU8
SURMTnVsbCwgYnJpZ2FuZDo6XzE+Pjo6dmFsdWU7Ci0gICAgICAgIGlmIChoYXNOdWxsVHlwZSkg
ewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9u
YWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgSURMTnVsbCwgaGFzTnVsbFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDIu
IExldCB0eXBlcyBiZSB0aGUgZmxhdHRlbmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24gdHlw
ZS4KLSAgICAgICAgLy8gTk9URTogVW5pb24gaXMgZXhwZWN0ZWQgdG8gYmUgcHJlLWZsYXR0ZW50
ZWQuCi0gICAgICAgIAotICAgICAgICAvLyAzLiBJZiBWIGlzIG51bGwgb3IgdW5kZWZpbmVkIHRo
ZW46Ci0gICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSB8fCBoYXNSZWNvcmRUeXBlKSB7Ci0g
ICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICAgICAg
ICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rpb25hcnkgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUu
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRo
ZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUu
Ci0gICAgICAgICAgICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFJlY29yZFR5cGUsIGhhc1JlY29yZFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyA0LiBJZiBWIGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuOgotICAgICAgICAvLyAgICAg
MS4gSWYgdHlwZXMgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHR5cGUgdGhhdCBWIGltcGxlbWVudHMs
IHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2Jq
ZWN0IFYuCi0gICAgICAgIC8vICAgICAyLiBJZiB0eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4g
cmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYu
Ci0gICAgICAgIC8vICAgICAgICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBz
dGVwIDQuMikKLSAgICAgICAgaWYgKGJyaWdhbmQ6OmFueTxUeXBlTGlzdCwgSXNJRExJbnRlcmZh
Y2U8YnJpZ2FuZDo6XzE+Pjo6dmFsdWUpIHsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8UmV0
dXJuVHlwZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAgICAgICBicmlnYW5kOjpmb3JfZWFjaDxJbnRl
cmZhY2VUeXBlTGlzdD4oWyZdKGF1dG8mJiB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJl
dHVyblZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRS
ZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwotICAgICAgICAgICAgICAgIHVz
aW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9uVHlw
ZTsKLSAgICAgICAgICAgICAgICB1c2luZyBSYXdUeXBlID0gdHlwZW5hbWUgVHlwZTo6UmF3VHlw
ZTsKLSAgICAgICAgICAgICAgICB1c2luZyBXcmFwcGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxSYXdUeXBlPjo6V3JhcHBlckNsYXNzOwotCi0gICAgICAgICAg
ICAgICAgYXV0byBjYXN0ZWRWYWx1ZSA9IFdyYXBwZXJUeXBlOjp0b1dyYXBwZWQodm0sIHZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUg
PSBSZXR1cm5UeXBlKEltcGxlbWVudGF0aW9uVHlwZShjYXN0ZWRWYWx1ZSkpOwotICAgICAgICAg
ICAgfSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShyZXR1cm5WYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBzdGVwcyA1IC0gMTAuCi0KLSAgICAg
ICAgLy8gMTEuIElmIFYgaXMgYW55IGtpbmQgb2Ygb2JqZWN0LCB0aGVuOgotICAgICAgICBpZiAo
aGFzT2JqZWN0VHlwZSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAg
ICAgICAgICAgICAgSlNDOjpKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2VsbC0+aXNPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gb3B0aW1pemUgdGhlIGZvbGxvd2luZyBjb2RlIGJ5
IG1ha2luZyB1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGZhY3QgdGhhdCB3ZSBo
YXZlIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBzZXF1
ZW5jZSB0eXBlLCB0aGVuOgotICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIDEuIExldCBt
ZXRob2QgYmUgdGhlIHJlc3VsdCBvZiBHZXRNZXRob2QoViwgQEBpdGVyYXRvcikuCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICAgMi4gUmV0dXJuSWZBYnJ1cHQobWV0aG9kKS4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgICAzLiBJZiBtZXRob2QgaXMgbm90IHVuZGVmaW5lZCwg
cmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYQotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgIHNlcXVlbmNlIG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4gICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNTZXF1ZW5jZVR5cGUgPSBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1Nl
cXVlbmNlVHlwZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9
IGhhc0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIFNlcXVlbmNlVHlwZSwgaGFzU2VxdWVuY2VUeXBlPjo6Y29udmVy
dChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIGEgZnJvemVuIGFycmF5
IHR5cGUsIHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhv
ZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgZnJvemVuIGFycmF5IG9mIHRoYXQgdHlwZSBmcm9tIFYgYW5kIG1ldGhvZC4KLSAgICAg
ICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgaGFzRnJvemVuQXJyYXlUeXBlID0gbnVtYmVy
T2ZGcm96ZW5BcnJheVR5cGVzICE9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNGcm96
ZW5BcnJheVR5cGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzSXRlcmF0b3Ig
PSBoYXNJdGVyYXRvck1ldGhvZChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgUmV0dXJuVHlwZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoYXNJdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBGcm96ZW5BcnJheVR5cGUsIGhhc0Zyb3plbkFycmF5VHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAzLiBJZiB0eXBlcyBpbmNsdWRlcyBhIGRpY3Rp
b25hcnkgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgY29udmVydGluZyBWIHRvIHRoYXQgZGljdGlvbmFyeSB0eXBlLgotICAgICAg
ICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25h
bENvbnZlcnRlcjxSZXR1cm5UeXBlLCBEaWN0aW9uYXJ5VHlwZSwgaGFzRGljdGlvbmFyeVR5cGU+
Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIDQuIElmIHR5cGVzIGluY2x1ZGVzIGEgcmVjb3JkIHR5cGUsIHRoZW4gcmV0dXJuIHRo
ZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgcmVjb3JkIHR5cGUuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNSZWNvcmRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNS4gSWYgdHlw
ZXMgaW5jbHVkZXMgYSBjYWxsYmFjayBpbnRlcmZhY2UgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBpbnRlcmZhY2UgdHlwZS4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBjYWxsYmFjayBpbnRl
cmZhY2UgdHlwZSBhbmQgc3RlcCAxMi41KQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNi4g
SWYgdHlwZXMgaW5jbHVkZXMgb2JqZWN0LCB0aGVuIHJldHVybiB0aGUgSURMIHZhbHVlIHRoYXQg
aXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBWLgotICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG9iamVjdCBhbmQgc3RlcCAxMi42KQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDEy
LiBJZiBWIGlzIGEgQm9vbGVhbiB2YWx1ZSwgdGhlbjoKLSAgICAgICAgLy8gICAgIDEuIElmIHR5
cGVzIGluY2x1ZGVzIGEgYm9vbGVhbiwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0
aW5nIFYgdG8gYm9vbGVhbi4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFzQm9vbGVhblR5cGUg
PSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExCb29sZWFuLCBicmlnYW5k
OjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc0Jvb2xlYW5UeXBlKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bW92
ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgSURMQm9vbGVhbiwgaGFzQm9vbGVhblR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFs
dWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDEzLiBJZiBWIGlzIGEgTnVt
YmVyIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVkZXMgYSBu
dW1lcmljIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRo
YXQgbnVtZXJpYyB0eXBlLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNOdW1lcmljVHlwZSA9
IGJyaWdhbmQ6OnNpemU8TnVtZXJpY1R5cGVMaXN0Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYg
KGhhc051bWVyaWNUeXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihD
b25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBOdW1lcmljVHlwZSwgaGFzTnVtZXJpY1R5
cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIDE0LiBJZiB0eXBlcyBpbmNsdWRlcyBhIHN0cmluZyB0eXBlLCB0aGVuIHJl
dHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IHR5cGUuCi0gICAgICAgIGNv
bnN0ZXhwciBib29sIGhhc1N0cmluZ1R5cGUgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0
Pjo6dmFsdWUgIT0gMDsKLSAgICAgICAgaWYgKGhhc1N0cmluZ1R5cGUpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZl
cnRlcjxSZXR1cm5UeXBlLCBTdHJpbmdUeXBlLCBoYXNTdHJpbmdUeXBlPjo6Y29udmVydChzdGF0
ZSwgdmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE1LiBJZiB0eXBlcyBpbmNsdWRlcyBh
IG51bWVyaWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8g
dGhhdCBudW1lcmljIHR5cGUuCi0gICAgICAgIGlmIChoYXNOdW1lcmljVHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNi4gSWYgdHlwZXMgaW5j
bHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0
byBib29sZWFuLgotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpCi0gICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAvLyAxNy4gVGhyb3cgYSBUeXBlRXJyb3IuCi0g
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gUmV0
dXJuVHlwZSgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExVbmlvbjxULi4uPj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxU
Li4uPjsKLSAgICB1c2luZyBUeXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAg
IHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIFR5cGU6OkltcGxlbWVudGF0aW9u
VHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAg
dXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZf
dDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwotCi0g
ICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2
YXJpYW50KQotICAgIHsKLSAgICAgICAgYXV0byBpbmRleCA9IHZhcmlhbnQuaW5kZXgoKTsKLQot
ICAgICAgICBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gcmV0dXJuVmFsdWU7Ci0gICAgICAg
IGJyaWdhbmQ6OmZvcl9lYWNoPFNlcXVlbmNlPihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAg
ICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBl
KHR5cGUpPjo6dHlwZTo6dHlwZTsKLSAgICAgICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkg
ewotICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9i
YWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZSk7Ci0gICAgICAgIHJldHVy
biByZXR1cm5WYWx1ZS52YWx1ZSgpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6
IERhdGUgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGF0ZT4gOiBEZWZh
dWx0Q29udmVydGVyPElETERhdGU+IHsKLSAgICBzdGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdmFsdWVUb0RhdGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxP
YmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc0Rh
dGUoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSURM
SlNPTiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExKU09OPiA6IERlZmF1
bHRDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OkpTT05TdHJpbmdpZnkoJnN0YXRlLCB2YWx1ZSwgMCk7Ci0gICAgfQotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMSlNPTj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpKU09OUGFyc2UoJnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogU2VyaWFsaXplZFNjcmlwdFZhbHVlIHR5cGUKLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExTZXJpYWxpemVkU2NyaXB0VmFsdWU8VD4+IHsKLSAg
ICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gVDo6Y3JlYXRlKHN0YXRlLCB2YWx1
ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgUmVmUHRy
PFQ+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUtPmRlc2VyaWFs
aXplKHN0YXRlLCAmZ2xvYmFsT2JqZWN0KSA6IEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogRXZlbnQgTGlzdGVuZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExFdmVudExpc3RlbmVyPFQ+PiB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJl
ZlB0cjxUPjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QpCi0g
ICAgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgp
KTsKLQotICAgICAgICBhdXRvIGxpc3RlbmVyID0gVDo6Y3JlYXRlKHZhbHVlLCB0aGlzT2JqZWN0
LCBmYWxzZSwgY3VycmVudFdvcmxkKCZzdGF0ZSkpOwotICAgICAgICBpZiAoIWxpc3RlbmVyKQot
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgCi0gICAgICAg
IHJldHVybiBsaXN0ZW5lcjsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBYUGF0
aE5TUmVzb2x2ZXIgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVy
PElETFhQYXRoTlNSZXNvbHZlcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETFhQYXRoTlNSZXNv
bHZlcjxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSBSZWZQdHI8VD47Ci0gICAgdXNpbmcg
V3JhcHBlclR5cGUgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8VD46Oldy
YXBwZXJDbGFzczsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBE
ZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAg
IEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotICAgICAgICBSZXR1cm5UeXBlIG9iamVjdCA9IFdyYXBwZXJUeXBl
Ojp0b1dyYXBwZWQodm0sIHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2Jq
ZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBVJiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgRGV0YWlsOjpnZXRQdHJPclJl
Zih2YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExJ
REJLZXkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExJREJLZXk+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKLQotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9y
d2FyZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KICNpZiBFTkFCTEUoV0VCR0wpCiAKLS8vIE1B
Uks6IC0KLS8vIE1BUks6IElETFdlYkdMQW55IHR5cGUKKyNpbmNsdWRlICJJRExUeXBlcy5oIgor
I2luY2x1ZGUgIkpTRE9NQ29udmVydEJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExXZWJHTEFueT4gewogICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKQEAgLTE4MjgsNzMgKzQyLDYgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMV2ViR0xBbgogICAgIH0KIH07CiAKLSNlbmRp
ZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZl
cnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5
cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAg
ICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwot
Ci0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1
dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURM
VHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAg
ICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBz
dGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQg
PSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3Ry
dWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsK
LSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExU
eXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0g
ICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7
Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAg
ICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERl
dGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNB
cmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAg
ICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJndW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydElu
ZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAg
IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciBy
ZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJ
bmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5
cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAg
IGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAg
ICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQot
ICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oCShyZXZpc2lvbiAyMTE1
NDgpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oOjIxMTU0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFhQYXRoTlNSZXNv
bHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSURCQmlu
ZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklETFR5cGVzLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09O
T2JqZWN0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29udmVyc2lvbiBmcm9tIEpT
VmFsdWUgLT4gSW1wbGVtZW50YXRpb24KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252
ZXJ0ZXI7CisKK2VudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9y
bWFsLCBFbmZvcmNlUmFuZ2UsIENsYW1wIH07CitlbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25D
b25maWd1cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07CisKK3N0cnVj
dCBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlciB7CisgICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKKyAgICB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OkpTT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252
ZXJ0ZXI8VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZl
cnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
LCBFeGNlcHRpb25UaHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhj
ZXB0aW9uVGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25U
aHJvd2VyJiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dl
cj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYm
KTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5
IGNvbnZlcnNpb24uCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJh
dGVkIGNvZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9u
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0IGNoYXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBD
b252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZh
bHVlLCB0aGlzT2JqZWN0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQor
eworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxP
YmplY3QpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVy
dGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25m
aWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQoreworICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBj
b25maWd1cmF0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25U
aHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2Vw
dGlvblRocm93ZXIpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sK
KyAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVj
dCwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5l
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKK3sKKyAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworfQorCisvLyBDb252
ZXJzaW9uIGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQordGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEpTQ29udmVydGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VT4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IFUmJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOworCisvLyBTcGVjaWFsaXplZCBi
eSBnZW5lcmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6
RXhlY1N0YXRlJiwgVCk7CisKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRl
ID0gSlNDb252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBK
U0NvbnZlcnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+CitzdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVy
bG9hZGVyOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEpTQ29udmVydGVyT3Zlcmxv
YWRlcjxULCB0cnVlLCB0cnVlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29u
dmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSlNDb252
ZXJ0ZXJPdmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4gc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCBzdGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBKU0NvbnZlcnRlck92ZXJs
b2FkZXI8VCwgZmFsc2UsIGZhbHNlPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2
YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6
Zm9yd2FyZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCit7CisgICAgcmV0
dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCit7CisgICAgcmV0dXJuIEpTQ29u
dmVydGVyT3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIFUmJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1
ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYm
IHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAg
ICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiB0
b0pTPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQoreworICAgIHJldHVybiBKU0NvbnZlcnRlcjxU
Pjo6Y29udmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
VT4odmFsdWUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25PcjxVPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNF
eGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdENvbnZlcnRlciB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVu
YW1lIFQ6OkltcGxlbWVudGF0aW9uVHlwZTsKK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IEFu
eSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExBbnk+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwor
ICAgIAorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPiYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7CisgICAg
fQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChj
b25zdCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZS5nZXQoKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBOdWxs
YWJsZSB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElE
TFR5cGU+CisgICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJRExUeXBlPiAKKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7
CisgICAgICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1w
bGVtZW50YXRpb25UeXBlOworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IHN0cnVjdCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4geworICAgICAg
ICB1c2luZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVy
blR5cGU7CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgTnVsbGFibGVDb252
ZXJzaW9uVHlwZTxJRExBbnk+IHsKKyAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZl
cnRlcjxJRExBbnk+OjpSZXR1cm5UeXBlOworICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJ
RExOdWxsYWJsZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6
Ok51bGxhYmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7CisgICAgCisgICAgLy8gMS4gSWYgVHlw
ZShWKSBpcyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlz
IGJlaW5nIHBlcmZvcm1lZAorICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0
dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAv
LyB0aGF0IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0
dXJuIHRoZSBJREwgbnVsbGFibGUgdHlwZSBUPworICAgIC8vIHZhbHVlIG51bGwuCisgICAgLy8K
KyAgICAvLyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KKyAgICAvLworICAgIC8vIDIuIE90aGVy
d2lzZSwgaWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxs
YWJsZSB0eXBlIFQ/IHZhbHVlIG51bGwuCisgICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURM
IHR5cGUgVC4KKworICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAg
ICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gVDo6
bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlLCB0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsK
KyAgICB9CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNv
bmZpZ3VyYXRpb24pCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENv
bnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOworICAgIH0K
KyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgICAgICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8
VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2Vy
PgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7CisgICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0
aW9uVGhyb3dlcikpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJv
d2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAg
IHJldHVybiBUOjpudWxsVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJv
d2VyPihleGNlcHRpb25UaHJvd2VyKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4
Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KKyAgICBzdGF0aWMgUmV0
dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhj
ZXB0aW9uVGhyb3dlcikKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOworICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZv
cndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOworICAgIH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4g
eworICAgIHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+
OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVj
dDsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkp
OworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpTVmFs
dWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKKyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBU
OjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7CisgICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVy
dChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUp
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChU
Ojppc051bGxWYWx1ZSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOworICAgIH0KK307CisKKy8v
IE1BUks6IC0KKy8vIE1BUks6IE51bGwgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0
ZXI8SURMTnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgc3Rk
OjpudWxscHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETE51bGw+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNT
dGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0
cl90KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgfQorfTsKKwor
Ly8gTUFSSzogLQorLy8gTUFSSzogQm9vbGVhbiB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENv
bnZlcnRlcjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4geworICAg
IHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Cisg
ICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBK
U0M6OmpzQm9vbGVhbih2YWx1ZSk7CisgICAgfQorfTsKKworLy8gQXJyYXlCdWZmZXIgc3VwcG9y
dC4KK3RlbXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFy
cmF5QnVmZmVyPiB7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVy
OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKK307
CisKKy8vIEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgordGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01X
cmFwcGVyQ29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7CisgICAgdXNpbmcg
V3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKKyAgICB1c2luZyBUb1dyYXBw
ZWRSZXR1cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Cit9OworCisvLyBUeXBlZCBh
cnJheXMgc3VwcG9ydC4KK3RlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+
IHsKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
PEFkYXB0b3I+OworICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpH
ZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OworfTsKKworLy8gTUFSSzogLQorLy8gTUFS
SzogSW50ZXJmYWNlIHR5cGUKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRl
cjxJRExJbnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsK
KyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPFQ+OjpUb1dyYXBwZWRSZXR1cm5UeXBlOworICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRo
cm93ZXI+CisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93
ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2
YWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKKyAgICAgICAgICAgIGV4Y2Vw
dGlvblRocm93ZXIoc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICB9
Cit9OworCituYW1lc3BhY2UgRGV0YWlsIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUKiBnZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsg
fQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBw
KSB7IHJldHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSBUKiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7
IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVm
PFQ+JiBwKSB7IHJldHVybiBwLmdldCgpOyB9CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYo
dmFsdWUpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBK
U0M6OkpTVmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3
YXJkPFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogSW50ZWdl
ciB0eXBlcworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0
Q29udmVydGVyPElETEJ5dGU+IHsKKyAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwg
dmFsdWUpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXA6CisgICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBj
b252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2
YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0
PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKKyAgICBzdGF0aWMgdWludDhfdCBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3Jj
ZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUp
OworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7
CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7
CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKKyAgICBz
dGF0aWMgaW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHJl
dHVybiB0b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0
b0ludDE2Q2xhbXAoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdG9J
bnQxNihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFNob3J0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJ
bXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0
ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnNpZ25lZFNob3J0PiB7CisgICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJh
bmdlKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRT
aG9ydD4geworICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBs
ZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExM
b25nPiB7CisgICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6dG9JbnQzMihudW1iZXIpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQzMl90IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNl
UmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwg
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7
CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewor
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7CisK
KyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
SlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9u
Zz4geworICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4geworICAgIHVzaW5nIFR5cGUg
PSB0eXBlbmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6Ompz
TnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8
SURMTG9uZ0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4geworICAgIHN0YXRp
YyBpbnQ2NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgcmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0b0ludDY0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUg
SURMTG9uZ0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQo
VHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25n
TG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICBzdGF0
aWMgdWludDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisK
KyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRl
PD4gc3RydWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKKyAgICB1c2luZyBU
eXBlID0gdHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6
IEZsb2F0aW5nIHBvaW50IHR5cGVzCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExG
bG9hdD4gOiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7CisKKyAgICBzdGF0aWMgaW5saW5l
IGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwor
ICAgIH0KKworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
ICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgICAgICBpZiAo
VU5MSUtFTFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCisgICAgICAgICAgICB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG51bWJlcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMRmxvYXQ+IHsKKyAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxl
bWVudGF0aW9uVHlwZTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4geworICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7CisgICAg
fQorCisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSkpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0
IEpTQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7CisgICAgdXNpbmcgVHlwZSA9IHR5
cGVuYW1lIElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETERvdWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4geworICAgIHN0YXRpYyBp
bmxpbmUgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBkb3VibGUgbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFz
dGQ6OmlzZmluaXRlKG51bWJlcikpKQorICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bWJlcjsKKyAgICB9CisKKyAgICBz
dGF0aWMgZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgZG91YmxlIG51
bWJlciA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghc3Rk
Ojppc2Zpbml0ZShudW1iZXIpKSkKKyAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9y
KHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudW1iZXI7CisgICAgfQorfTsKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9
IHR5cGVuYW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJl
c3RyaWN0ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+
IHsKKyAgICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiBudW1i
ZXI7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElE
TFVucmVzdHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIo
dmFsdWUpOworICAgIH0KKworICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgorICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICB9Cit9Owor
CisvLyBNQVJLOiAtCisvLyBNQVJLOiBTdHJpbmcgdHlwZXMKKwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29udmVydGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4g
eworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAg
ICBpZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJl
YXROdWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJp
bmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2Fj
aGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Cisg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0g
U3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKKyAgICB7CisgICAgICAgIGlm
IChjb25maWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51
bGxBc0VtcHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CisgICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVT
dHJpbmc+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7CisKKyAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRo
Q2FjaGUoJnN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29u
dmVydGVyPElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewor
ICAgIHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9
IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCisgICAgeworICAgICAgICBp
ZiAoY29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXRO
dWxsQXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFs
dWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0
cmluZz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAg
IHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhD
YWNoZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBP
YmplY3QgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMT2JqZWN0PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0
aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2Vw
dGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihz
dGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07CisgICAgfQor
fTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcworCituYW1lc3BhY2Ug
RGV0YWlsIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXIgeworICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9y
PHR5cGVuYW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47CisKKyAgICAgICAgc3RhdGlj
IFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3Qq
IGpzT2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKKyAg
ICAgICAgICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShK
U0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkg
eworICAgICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlw
ZT46OmNvbnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVz
IGFuZCBJRExMb25nLiBUbyBhZGQKKyAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlw
ZXMsIGFkZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAor
ICAgIC8vIHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1
bWVudHMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KKyAgICBzdHJ1Y3QgTnVtZXJp
Y1NlcXVlbmNlQ29udmVydGVyIHsKKyAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdl
bmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlw
ZSA9IHR5cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7CisKKyAgICAgICAgc3Rh
dGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0g
SlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9i
amVjdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQo
c3RhdGUsIG9iamVjdCk7CisKKyAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6
OmFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgp
LT5pc0FycmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7
CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAg
ICAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlS
ZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0
aGUgcmlnaHQgZXhjZXB0aW9uIHRvIHRocm93PworICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFy
cmF5LT5pbmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7CisKKyAgICAgICAg
ICAgIGlmIChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1
b3VzKClbaV0uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0
ZWRWYWx1ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXNJbnQzMigpW2ldLmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlu
ZGV4VmFsdWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKDApOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5
KCktPmNvbnRpZ3VvdXNEb3VibGUoKVtpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6
aXNuYW4oZG91YmxlVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252
ZXJ0KHN0YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXkt
PmdldERpcmVjdEluZGV4KCZzdGF0ZSwgaSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVu
Y2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZl
cnRlciB7CisgICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMVHlwZT47CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBH
ZW5lcmljQ29udmVydGVyOjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3Qo
dmFsdWUpOworICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3Qp
OworCisgICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVj
dCk7CisgICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJh
dG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOworCisgICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIFJldHVy
blR5cGUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5
KGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2Vw
dGlvbiB0byB0aHJvdz8KKyAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdU
eXBlKCkgJiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOworCisgICAgICAgICAgICBpZiAoaW5kZXhp
bmdUeXBlID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gaW5kZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQo
c3RhdGUsIGluZGV4VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRB
cHBlbmQoY29udmVydGVkVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBhdXRvIGluZGV4
VmFsdWUgPSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgICAgICAgICAgaWYg
KCFpbmRleFZhbHVlKQorICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1Vu
ZGVmaW5lZCgpOworCisgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZl
cnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25n
PiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMTG9uZz46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5
cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExM
b25nPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRl
bXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKKyAgICAg
ICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJ
RExGbG9hdD46OlJldHVyblR5cGU7CisKKyAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
CisgICAgc3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Cisg
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRl
cjxJRExEb3VibGU+IHsKKyAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVy
aWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOworCisgICAgICAgIHN0
YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VD
b252ZXJ0ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7CisgICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFt
ZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJu
VHlwZTsKKworICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gTnVtZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExTZXF1ZW5jZTxUPj4geworICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRh
aWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOworCisgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252
ZXJ0KHN0YXRlLCB2YWx1ZSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
VSwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikK
KyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVt
ZW50KSk7CisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRy
LCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8
SURMRnJvemVuQXJyYXk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0
YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKKworICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4
ZWNTdGF0ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0
b3IpCisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZWxlbWVudCkpOworICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4
ZWMsIG51bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOworICAgICAgICByZXR1cm4gSlNDOjpv
YmplY3RDb25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOworICAgIH0KK307CisKKy8vIE1B
Uks6IC0KKy8vIE1BUks6IFJlY29yZCB0eXBlCisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIElETFN0cmluZ1R5cGU+CisgICAgc3RydWN0IElkZW50aWZpZXJDb252
ZXJ0ZXI7CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERP
TVN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyLnN0cmluZygpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewor
ICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElE
TFVTVlN0cmluZz4geworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZp
ZXIpOworICAgICAgICB9CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5h
bWUgVj4gc3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExSZWNvcmQ8SywgVj4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURM
UmVjb3JkPEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7CisgICAgdXNpbmcgS2V5VHlwZSA9IHR5
cGVuYW1lIEs6OkltcGxlbWVudGF0aW9uVHlwZTsKKyAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBl
bmFtZSBWOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252
ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBl
bXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCisgICAgICAgIC8vIDIuIElmIFR5cGUoTykg
aXMgVW5kZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCisgICAgICAgIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgCisg
ICAgICAgIC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3Iu
CisgICAgICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0
KHZhbHVlKTsKKyAgICAKKyAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7CisgICAgCisgICAgICAg
IC8vIDQuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCisgICAgICAgIEpT
Qzo6UHJvcGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3Ry
aW5ncyk7CisgICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0
ZSwga2V5cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVt
ZW50IGtleSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6CisgICAgICAgIGZvciAoYXV0byYga2V5IDog
a2V5cykgeworICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVy
dHldXShrZXkpLgorICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRv
cjsKKyAgICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgICAgIGlmICghZGlkR2V0
RGVzY3JpcHRvcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLy8g
Mi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRy
dWU6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNo
ZWNrIGZvciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhl
IGRlZmF1bHQKKyAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/CisKKyAgICAgICAgICAg
IGlmICghZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVt
ZXJhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNv
bnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgorICAgICAgICAgICAgICAgIGF1dG8g
dHlwZWRLZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUs
IGtleSk7CisKKyAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5
KS4KKyAgICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBr
ZXkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICAgICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQg
dG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi4KKyAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFs
dWUgPSBDb252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVz
dWx0LCBzZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCisgICAgICAgICAgICAgICAgLy8gTm90
ZTogVGhpcyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0
eXBlZEtleSwgdHlwZWRWYWx1ZSkuCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5
cGVkS2V5LCB0eXBlZFZhbHVlIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8gNi4gUmV0dXJuIHJlc3VsdC4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMUmVjb3JkPEssIFY+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRy
dWU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgorICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKKyAgICB7CisgICAgICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICAKKyAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVj
dENyZWF0ZSglT2JqZWN0UHJvdG90eXBlJSkuCisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoJnN0YXRlKTsKKyAgICAgICAgCisgICAgICAgIC8vIDIuIFJlcGVhdCwg
Zm9yIGVhY2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBrZXlWYWx1ZVBhaXIgOiBtYXApIHsKKyAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBi
ZSBrZXkgY29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCisgICAgICAgICAgICAvLyBO
b3RlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUK
KyAgICAgICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCisKKyAgICAgICAg
ICAgIC8vIDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0
IHZhbHVlLgorICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBrZXlWYWx1ZVBhaXIudmFsdWUpOworCisgICAgICAgICAgICAvLyAzLiBMZXQgY3Jl
YXRlZCBiZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KKyAg
ICAgICAgICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7CisKKyAg
ICAgICAgICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgorICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIDMu
IFJldHVybiByZXN1bHQuCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLy8g
TUFSSzogLQorLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TERpY3Rpb25hcnk8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKKworICAgIHN0YXRp
YyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUs
IHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252
ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmpl
Y3QgPSB0cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGlj
dGlvbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgZGljdGlvbmFyeSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQor
Ly8gTUFSSzogRW51bWVyYXRpb24gdHlwZQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVy
YXRpb248VD4+IHsKKyAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJh
dGlvbjxUPihzdGF0ZSwgdmFsdWUpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKKworICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0
Q29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CisgICAgc3RhdGlj
IFJlZlB0cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYg
ZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKKyAgICB7CisgICAgICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7CisgICAg
ICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFQ6OmNyZWF0
ZShKU0M6OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7CisgICAgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248
VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOworCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNv
bnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJP
clJlZih2YWx1ZSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwor
ICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBl
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRl
cmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9u
VGhyb3dlcj4KKyAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigp
KQorICAgIHsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7CisgICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBUOjpjcmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFj
a0ludGVyZmFjZTxUPj4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
ZmFsc2U7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFs
c2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoY29uc3QgVSYgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdG9KUyhEZXRh
aWw6OmdldFB0ck9yUmVmKHZhbHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VT4KKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogVW5pb24gdHlwZQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+
CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJldHVy
blR5cGUsIHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlw
ZSwgVCwgdHJ1ZT4geworICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUg
VD4KK3N0cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewor
ICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owor
ICAgIH0KK307CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIExp
c3QsIGJvb2wgY29uZGl0aW9uPgorICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OworCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGlzdD4KKyAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0
LCB0cnVlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+
OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgorICAgIHN0cnVjdCBDb25k
aXRpb25hbEZyb250PExpc3QsIGZhbHNlPgorICAgIHsKKyAgICAgICAgdXNpbmcgdHlwZSA9IHZv
aWQ7CisgICAgfTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+
Cit1c2luZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZy
b250PExpc3QsIGNvbmRpdGlvbj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlv
bjxULi4uPj4geworICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKKyAgICB1c2luZyBU
eXBlTGlzdCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OworICAgIHVzaW5nIFJldHVyblR5cGUg
PSB0eXBlbmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7CisKKyAgICB1c2luZyBOdW1lcmlj
VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6
Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMg
PSBicmlnYW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOworICAgIHN0YXRpY19hc3Nl
cnQobnVtYmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwor
ICAgIHVzaW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3Qs
IG51bWJlck9mTnVtZXJpY1R5cGVzICE9IDA+OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGFsc28gY2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgorICAgIHVzaW5nIFN0cmluZ1R5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5n
LCBicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3Ry
aW5nVHlwZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBl
cyA9PSAxLCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24u
Iik7CisgICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxp
c3QsIG51bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBTZXF1ZW5jZVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8x
Pj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0g
YnJpZ2FuZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fzc2Vy
dChudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0g
MSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7
CisgICAgdXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVM
aXN0LCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47CisKKyAgICB1c2luZyBGcm96ZW5BcnJh
eVR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJy
aWdhbmQ6Ol8xPj47CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5B
cnJheVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Cisg
ICAgc3RhdGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJP
ZkZyb3plbkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkg
dHlwZXMgaW4gYW4gSURMVW5pb24uIik7CisgICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29u
ZGl0aW9uYWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlw
ZXMgIT0gMD47CisKKyAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0
ZXI8VHlwZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OworICAgIHN0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxE
aWN0aW9uYXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKKyAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGlj
dGlvbmFyeVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJl
IGNhbiBiZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25h
cnlUeXBlcyAhPSAwOworICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9u
dDxEaWN0aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKKworICAgIHVzaW5nIFJl
Y29yZFR5cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmln
YW5kOjpfMT4+OworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7CisgICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5
cGVzICE9IDA7CisgICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3Jk
VHlwZUxpc3QsIGhhc1JlY29yZFR5cGU+OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhh
c09iamVjdFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJh
eVR5cGVzICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+
IDA7CisKKyAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBl
TGlzdCwgSXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKKworICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICAvLyAxLiBJZiB0aGUgdW5p
b24gdHlwZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmlu
ZWQsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KKyAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzTnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExO
dWxsLCBicmlnYW5kOjpfMT4+Ojp2YWx1ZTsKKyAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Cisg
ICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENv
bnZlcnRlcjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMi4gTGV0
IHR5cGVzIGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgor
ICAgICAgICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4K
KyAgICAgICAgCisgICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoK
KyAgICAgICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gICAgIDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVy
biB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KKyAg
ICAgICAgICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiBy
ZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAg
ICAgICAgICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IDQuIElmIFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJ
ZiB0eXBlcyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhl
biByZXR1cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qg
Vi4KKyAgICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KKyAg
ICAgICAgLy8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAg
NC4yKQorICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxi
cmlnYW5kOjpfMT4+Ojp2YWx1ZSkgeworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5U
eXBlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFj
ZVR5cGVMaXN0PihbJl0oYXV0byYmIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV0dXJu
VmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CisgICAgICAgICAgICAgICAgdXNpbmcg
SW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwor
ICAgICAgICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwor
ICAgICAgICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICAgICAgICAgICAg
ICBhdXRvIGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJl
dHVyblR5cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVy
biBXVEZNb3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KKworICAgICAgICAv
LyAxMS4gSWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46CisgICAgICAgIGlmIChoYXNP
YmplY3RUeXBlKSB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICAgICAg
ICAgIGlmIChjZWxsLT5pc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFr
aW5nIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUg
cHJvdmVkIHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNl
IHR5cGUsIHRoZW46CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhv
ZCBiZSB0aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1
cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgICAgc2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJl
ck9mU2VxdWVuY2VUeXBlcyAhPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVu
Y2VUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFz
SXRlcmF0b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFzSXRlcmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0
ZXI8UmV0dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSkudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlw
ZSwgdGhlbjoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJl
IHRoZSByZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0
aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAg
ICBmcm96ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgorICAgICAgICAg
ICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZy
b3plbkFycmF5VHlwZXMgIT0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFy
cmF5VHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhh
c0l0ZXJhdG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGhhc0l0ZXJhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVy
dGVyPFJldHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29u
dmVydChzdGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFy
eSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCisgICAgICAgICAg
ICAgICAgICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29u
dmVydGVyPFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgNC4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJl
c3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGhhc1JlY29yZFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxS
ZXR1cm5UeXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBp
bmNsdWRlcyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0
IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFj
ZSB0eXBlIGFuZCBzdGVwIDEyLjUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0
eXBlcyBpbmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBh
IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IFYuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAgKEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gMTIuIElm
IFYgaXMgYSBCb29sZWFuIHZhbHVlLCB0aGVuOgorICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMg
aW5jbHVkZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcg
ViB0byBib29sZWFuLgorICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJy
aWdhbmQ6OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8x
Pj46OnZhbHVlOworICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdU
Rjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJ
RExCb29sZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIg
dmFsdWUsIHRoZW46CisgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVy
aWMgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBu
dW1lcmljIHR5cGUuCisgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJp
Z2FuZDo6c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFz
TnVtZXJpY1R5cGUpIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRp
dGlvbmFsQ29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46
OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJu
IHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KKyAgICAgICAgY29uc3Rl
eHByIGJvb2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2
YWx1ZSAhPSAwOworICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7CisKKyAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVt
ZXJpYyB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0
IG51bWVyaWMgdHlwZS4KKyAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQorICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252
ZXJ0ZXI8UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGJvb2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJv
b2xlYW4uCisgICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFs
dWUpLnZhbHVlKCkpOworCisgICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KKyAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiBSZXR1cm5U
eXBlKCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVuaW9uPFQuLi4+PiB7CisgICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+
OworICAgIHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7CisgICAgdXNp
bmcgSW1wbGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBl
OworCisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CisKKyAgICB1c2lu
ZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+
LCBXVEY6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisKKyAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlh
bnQpCisgICAgeworICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOworCisgICAg
ICAgIHN0ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKKyAgICAgICAgYnJp
Z2FuZDo6Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgeworICAgICAgICAgICAg
dXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlw
ZSk+Ojp0eXBlOjp0eXBlOworICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9i
amVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSk7CisKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJl
dHVyblZhbHVlLnZhbHVlKCk7CisgICAgfQorfTsKKworLy8gTUFSSzogLQorLy8gTUFSSzogRGF0
ZSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMRGF0ZT4geworICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZVRvRGF0ZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExEYXRlPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
U3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVj
dCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzRGF0ZSgm
c3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBNQVJLOiAtCisvLyBNQVJLOiBJRExKU09O
IHR5cGUKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENv
bnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpT
Qzo6SlNPTlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKKyAgICB9Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0ds
b2JhbE9iamVjdCA9IGZhbHNlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4g
OiBEZWZhdWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4geworICAgIHN0
YXRpYyBSZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsK
KyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
U2VyaWFsaXplZFNjcmlwdFZhbHVlPFQ+PiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7CisKKyAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4g
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUo
c3RhdGUsICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKKyAgICB9Cit9OworCisvLyBN
QVJLOiAtCisvLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEV2ZW50TGlzdGVuZXI8VD4+IHsKKyAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRy
PFQ+OworCisgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKKyAgICB7
CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwor
CisgICAgICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZh
bHNlLCBjdXJyZW50V29ybGQoJnN0YXRlKSk7CisgICAgICAgIGlmICghbGlzdGVuZXIpCisgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAKKyAgICAgICAgcmV0
dXJuIGxpc3RlbmVyOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IFhQYXRoTlNS
ZXNvbHZlciB0eXBlCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
WFBhdGhOU1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVy
PFQ+PiB7CisgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKKyAgICB1c2luZyBXcmFw
cGVyVHlwZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBl
ckNsYXNzOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1
bHRFeGNlcHRpb25UaHJvd2VyPgorICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQorICAgIHsKKyAgICAgICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisgICAgICAgIFJldHVyblR5cGUgb2JqZWN0ID0gV3JhcHBlclR5cGU6OnRv
V3JhcHBlZCh2bSwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFvYmplY3Qp
KQorICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExYUGF0aE5TUmVzb2x2ZXI8VD4+IHsKKyAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRz
R2xvYmFsT2JqZWN0ID0gdHJ1ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBEZXRhaWw6OmdldFB0ck9yUmVmKHZh
bHVlKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgSlND
OjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOworICAgIH0KK307CisKKy8vIE1BUks6IC0KKy8vIE1BUks6IElETElEQktl
eSB0eXBlCisKK3RlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4geworICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFU+CisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJk
PFU+KHZhbHVlKSk7CisgICAgfQorfTsKKworI2lmIEVOQUJMRShXRUJHTCkKKworLy8gTUFSSzog
LQorLy8gTUFSSzogSURMV2ViR0xBbnkgdHlwZQorCit0ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZl
cnRlcjxJRExXZWJHTEFueT4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOworCisgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgdmFsdWUpOworICAgIH0KK307CisKKyNlbmRpZgorCisvLyBNQVJLOiAtCisvLyBN
QVJLOiBTdXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCisKK25hbWVzcGFjZSBE
ZXRhaWwgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlh
ZGljQ29udmVydGVyQmFzZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAorICAg
IHN0cnVjdCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgeworICAgICAgICB1c2luZyBJdGVtID0gdHlw
ZW5hbWUgSURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOworCisgICAgICAgIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
KyAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVs
bG9wdCk7CisKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmFyaWFkaWND
b252ZXJ0ZXJCYXNlPElETEludGVyZmFjZTxUPj4geworICAgICAgICB1c2luZyBJdGVtID0gc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxUPjsKKworICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJ
dGVtPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJm
YWNlPFQ+Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOworICAgICAgICB9CisgICAgfTsKKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+CisgICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVy
IDogVmFyaWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKKyAgICAgICAgdXNpbmcgSXRlbSA9
IHR5cGVuYW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKKyAgICAgICAg
dXNpbmcgQ29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OworCisgICAgICAgIHN0cnVjdCBSZXN1bHQg
eworICAgICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPENvbnRhaW5lcj4gYXJndW1lbnRzOworICAgICAgICB9OworICAgIH07Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0
ZXI8SURMVHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKK3sKKyAgICBzaXplX3QgbGVuZ3RoID0gc3Rh
dGUuYXJndW1lbnRDb3VudCgpOworICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQorICAgICAg
ICByZXR1cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKKworICAgIHR5cGVuYW1lIERldGFpbDo6VmFy
aWFkaWNDb252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7CisgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gdmFs
dWUgPSBEZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAg
ICAgICByZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKKyAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChXVEZNb3ZlKCp2YWx1ZSkpOworICAgIH0KKworICAgIHJldHVybiB7IGxlbmd0aCwg
V1RGTW92ZShyZXN1bHQpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFhQYXRoTlNSZXNvbHZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFhQYXRo
TlNSZXNvbHZlci5oCShyZXZpc2lvbiAyMTE1NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRYUGF0aE5TUmVzb2x2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTc0NyArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJCdWZmZXJTb3VyY2Uu
aCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURMVHlwZXMu
aCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCi0jaW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbE9iamVjdElubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTT05PYmplY3QuaD4KKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCYXNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29udmVyc2lvbiBmcm9tIEpTVmFsdWUg
LT4gSW1wbGVtZW50YXRpb24KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI7
Ci0KLWVudW0gY2xhc3MgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIHsgTm9ybWFsLCBF
bmZvcmNlUmFuZ2UsIENsYW1wIH07Ci1lbnVtIGNsYXNzIFN0cmluZ0NvbnZlcnNpb25Db25maWd1
cmF0aW9uIHsgTm9ybWFsLCBUcmVhdE51bGxBc0VtcHR5U3RyaW5nIH07Ci0KLXN0cnVjdCBEZWZh
dWx0RXhjZXB0aW9uVGhyb3dlciB7Ci0gICAgdm9pZCBvcGVyYXRvcigpKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLSAgICB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OkpTT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0eXBlbmFtZSBDb252ZXJ0ZXI8
VD46OlJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgSlNE
T01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24pOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXI+IHR5cGVuYW1lIENvbnZlcnRlcjxU
Pjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBFeGNl
cHRpb25UaHJvd2VyJiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9u
VGhyb3dlcj4gdHlwZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEpTQzo6SlNPYmplY3QmLCBFeGNlcHRpb25UaHJvd2Vy
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gdHlw
ZW5hbWUgQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgRXhjZXB0aW9uVGhyb3dlciYmKTsKLQot
Ly8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgZm9yIElETCBkaWN0aW9uYXJ5IGNvbnZl
cnNpb24uCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGNvbnZlcnREaWN0aW9uYXJ5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotLy8gU3BlY2lhbGl6ZWQgYnkgZ2VuZXJhdGVkIGNv
ZGUgZm9yIElETCBlbnVtZXJhdGlvbiBjb252ZXJzaW9uLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RkOjpvcHRpb25hbDxUPiBwYXJzZUVudW1lcmF0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgY29udmVydEVudW1lcmF0aW9uKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0IGNo
YXIqIGV4cGVjdGVkRW51bWVyYXRpb25WYWx1ZXMoKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBDb252ZXJ0
ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0KQotewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCB0
aGlzT2JqZWN0KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENv
bnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBnbG9iYWxPYmplY3Qp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlwZW5hbWUgQ29udmVydGVyPFQ+
OjpSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewot
ICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0
aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRl
cjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQot
ewotICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1
cmF0aW9uKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBFeGNlcHRpb25UaHJvd2Vy
JiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0
KHN0YXRlLCB2YWx1ZSwgc3RkOjpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRo
cm93ZXIpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlcj4gaW5saW5lIHR5cGVuYW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICBy
ZXR1cm4gQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgdGhpc09iamVjdCwgc3Rk
Ojpmb3J3YXJkPEV4Y2VwdGlvblRocm93ZXI+KGV4Y2VwdGlvblRocm93ZXIpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlcj4gaW5saW5lIHR5cGVu
YW1lIENvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBF
eGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlcikKLXsKLSAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotfQotCi0vLyBDb252ZXJzaW9u
IGZyb20gSW1wbGVtZW50YXRpb24gLT4gSlNWYWx1ZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IEpTQ29udmVydGVyOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoVSYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIFUmJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxVPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VT4mJik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIFUmJik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFU+JiYpOwotCi0vLyBTcGVjaWFsaXplZCBieSBnZW5l
cmF0ZWQgY29kZSBmb3IgSURMIGVudW1lcmF0aW9uIGNvbnZlcnNpb24uCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTU3RyaW5nKiBjb252ZXJ0RW51bWVyYXRpb25Ub0pTKEpTQzo6RXhlY1N0
YXRlJiwgVCk7Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgYm9vbCBuZWVkc1N0YXRlID0gSlND
b252ZXJ0ZXI8VD46Om5lZWRzU3RhdGUsIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBKU0NvbnZl
cnRlcjxUPjo6bmVlZHNHbG9iYWxPYmplY3Q+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJPdmVybG9hZGVy
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RydWN0IEpTQ29udmVydGVyT3ZlcmxvYWRlcjxU
LCB0cnVlLCB0cnVlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6SlNW
YWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVy
PFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSlNDb252ZXJ0ZXJP
dmVybG9hZGVyPFQsIHRydWUsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3Rh
dGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVSYmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBz
dGQ6OmZvcndhcmQ8VT4odmFsdWUpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0NvbnZl
cnRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU0NvbnZlcnRlck92ZXJsb2FkZXI8
VCwgZmFsc2UsIGZhbHNlPiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgVSYmIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgVSYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2Fy
ZDxVPih2YWx1ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpT
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBVJiYgdmFsdWUpCi17Ci0gICAgcmV0dXJuIEpTQ29udmVydGVy
T3ZlcmxvYWRlcjxUPjo6Y29udmVydChzdGF0ZSwgc3RkOjpmb3J3YXJkPFU+KHZhbHVlKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIFUmJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gSlNDb252ZXJ0ZXJPdmVybG9hZGVyPFQ+Ojpj
b252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFU+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRvSlM8VD4oc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxVPiYmIHZhbHVl
KQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAg
cHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0
aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiB0b0pTPFQ+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
TmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCwgVSYmIHZhbHVlKQotewotICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29u
dmVydE5ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8VT4odmFs
dWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb25PcjxVPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQot
ICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkPFQ+KHN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdENvbnZlcnRlciB7Ci0gICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIFQ6
OkltcGxlbWVudGF0aW9uVHlwZTsKLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEFueSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExBbnk+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExBbnk+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gSlNDOjpKU1ZhbHVlOwotICAgIAot
ICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoY29uc3QgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
PiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUuZ2V0KCk7Ci0gICAgfQotfTsK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQW55PiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChjb25zdCBKU0M6OkpTVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgIH0KLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChjb25zdCBK
U0M6OlN0cm9uZzxKU0M6OlVua25vd24+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZS5nZXQoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBOdWxsYWJsZSB0
eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+
Ci0gICAgc3RydWN0IE51bGxhYmxlQ29udmVyc2lvblR5cGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBJRExUeXBlPiAKLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9uVHlwZSB7Ci0gICAg
ICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExOdWxsYWJsZTxJRExUeXBlPjo6SW1wbGVtZW50
YXRpb25UeXBlOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0cnVj
dCBOdWxsYWJsZUNvbnZlcnNpb25UeXBlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2lu
ZyBUeXBlID0gdHlwZW5hbWUgQ29udmVydGVyPElETEludGVyZmFjZTxUPj46OlJldHVyblR5cGU7
Ci0gICAgfTsKLQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgTnVsbGFibGVDb252ZXJzaW9u
VHlwZTxJRExBbnk+IHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIENvbnZlcnRlcjxJ
RExBbnk+OjpSZXR1cm5UeXBlOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMTnVsbGFibGU8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExOdWxs
YWJsZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6Ok51bGxh
YmxlQ29udmVyc2lvblR5cGU8VD46OlR5cGU7Ci0gICAgCi0gICAgLy8gMS4gSWYgVHlwZShWKSBp
cyBub3QgT2JqZWN0LCBhbmQgdGhlIGNvbnZlcnNpb24gdG8gYW4gSURMIHZhbHVlIGlzIGJlaW5n
IHBlcmZvcm1lZAotICAgIC8vIGR1ZSB0byBWIGJlaW5nIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0
ZSB3aG9zZSB0eXBlIGlzIGEgbnVsbGFibGUgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICAvLyB0aGF0
IGlzIGFubm90YXRlZCB3aXRoIFtUcmVhdE5vbk9iamVjdEFzTnVsbF0sIHRoZW4gcmV0dXJuIHRo
ZSBJREwgbnVsbGFibGUgdHlwZSBUPwotICAgIC8vIHZhbHVlIG51bGwuCi0gICAgLy8KLSAgICAv
LyBOT1RFOiBIYW5kbGVkIGVsc2V3aGVyZS4KLSAgICAvLwotICAgIC8vIDIuIE90aGVyd2lzZSwg
aWYgViBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiByZXR1cm4gdGhlIElETCBudWxsYWJsZSB0
eXBlIFQ/IHZhbHVlIG51bGwuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHJlc3Vs
dCBvZiBjb252ZXJ0aW5nIFYgdXNpbmcgdGhlIHJ1bGVzIGZvciB0aGUgaW5uZXIgSURMIHR5cGUg
VC4KLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAg
cmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYg
KHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gVDo6bnVsbFZh
bHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
LCB0aGlzT2JqZWN0KTsKLSAgICB9Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4g
Q29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0KTsKLSAgICB9
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgICAgIHJldHVybiBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRl
cjxUPjo6Y29udmVydChzdGF0ZSwgdmFsdWUsIGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLSAgICBz
dGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQot
ICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAg
ICByZXR1cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNv
bnZlcnQoc3RhdGUsIHZhbHVlLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAg
IHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1
cm4gVDo6bnVsbFZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBDb252ZXJ0ZXI8VD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlLCBzdGQ6OmZvcndhcmQ8RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhy
b3dlcikpOwotICAgIH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIpCi0gICAgewot
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBUOjpudWxsVmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIENvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUsIHRoaXNPYmplY3QsIHN0ZDo6Zm9yd2FyZDxFeGNlcHRpb25UaHJvd2VyPihl
eGNlcHRpb25UaHJvd2VyKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlv
blRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KLSAgICBzdGF0aWMgUmV0dXJuVHlw
ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9u
VGhyb3dlcikKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFQ6Om51bGxWYWx1ZSgpOwotICAgICAgICByZXR1cm4gQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmZvcndhcmQ8
RXhjZXB0aW9uVGhyb3dlcj4oZXhjZXB0aW9uVGhyb3dlcikpOwotICAgIH0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExOdWxsYWJsZTxUPj4gewotICAg
IHVzaW5nIEltcGxlbWVudGF0aW9uVHlwZSA9IHR5cGVuYW1lIElETE51bGxhYmxlPFQ+OjpJbXBs
ZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IEpTQ29udmVydGVyPFQ+OjpuZWVkc1N0YXRlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc0dsb2JhbE9iamVjdCA9IEpTQ29udmVydGVyPFQ+OjpuZWVkc0dsb2JhbE9iamVjdDsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVy
dGVyPFQ+Ojpjb252ZXJ0KFQ6OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAg
IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
IChUOjppc051bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwo
KTsKLSAgICAgICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBUOjpleHRy
YWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBVJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAoVDo6aXNOdWxsVmFsdWUodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNOdWxsKCk7Ci0gICAgICAgIHJldHVybiBKU0NvbnZlcnRlcjxUPjo6Y29udmVydChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBUOjpleHRyYWN0VmFsdWVGcm9tTnVsbGFibGUodmFsdWUpKTsKLSAg
ICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChUOjppc051
bGxWYWx1ZSh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICAg
ICAgcmV0dXJuIEpTQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0YXRlLCBnbG9iYWxPYmplY3QsIFQ6
OmV4dHJhY3RWYWx1ZUZyb21OdWxsYWJsZSh2YWx1ZSkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6
IC0KLS8vIE1BUks6IE51bGwgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURM
TnVsbD4gOiBEZWZhdWx0Q29udmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgc3RkOjpudWxs
cHRyX3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETE51bGw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9
IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KHN0ZDo6bnVsbHB0cl90KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgfQotfTsKLQotLy8gTUFS
SzogLQotLy8gTUFSSzogQm9vbGVhbiB0eXBlCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRl
cjxJRExCb29sZWFuPiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0YXRp
YyBib29sIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9Cb29sZWFuKCZzdGF0ZSk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQm9vbGVhbj4gewotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpK
U1ZhbHVlIGNvbnZlcnQoYm9vbCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6Ompz
Qm9vbGVhbih2YWx1ZSk7Ci0gICAgfQotfTsKLQotLy8gQXJyYXlCdWZmZXIgc3VwcG9ydC4KLXRl
bXBsYXRlPD4gc3RydWN0IEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxKU0M6OkFycmF5QnVm
ZmVyPiB7Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyOwotICAg
IHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBKU0M6OkFycmF5QnVmZmVyKjsKLX07Ci0KLS8v
IEFycmF5QnVmZmVyVmlldyBzdXBwb3J0LgotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB7Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gSlNDOjpKU0FycmF5QnVmZmVyVmlldzsKLSAgICB1c2luZyBUb1dyYXBwZWRSZXR1
cm5UeXBlID0gUmVmUHRyPEFycmF5QnVmZmVyVmlldz47Ci19OwotCi0vLyBUeXBlZCBhcnJheXMg
c3VwcG9ydC4KLXRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IHN0cnVjdCBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8SlNDOjpHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+IHsKLSAg
ICB1c2luZyBXcmFwcGVyQ2xhc3MgPSBKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYXB0
b3I+OwotICAgIHVzaW5nIFRvV3JhcHBlZFJldHVyblR5cGUgPSBSZWZQdHI8SlNDOjpHZW5lcmlj
VHlwZWRBcnJheVZpZXc8QWRhcHRvcj4+OwotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50
ZXJmYWNlIHR5cGUKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENvbnZlcnRlcjxJRExJ
bnRlcmZhY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExJbnRlcmZhY2U8VD4+IHsKLSAgICB1
c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+
OjpUb1dyYXBwZWRSZXR1cm5UeXBlOwotICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPFQ+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBF
eGNlcHRpb25UaHJvd2VyKCkpCi0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgPSBXcmFwcGVyVHlwZTo6dG9XcmFwcGVkKHZtLCB2YWx1ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghb2JqZWN0KSkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRo
cm93ZXIoc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci19Owot
Ci1uYW1lc3BhY2UgRGV0YWlsIHsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBn
ZXRQdHJPclJlZihjb25zdCBUKiBwKSB7IHJldHVybiBjb25zdF9jYXN0PFQqPihwKTsgfQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUJiBnZXRQdHJPclJlZihjb25zdCBUJiBwKSB7IHJl
dHVybiBjb25zdF9jYXN0PFQmPihwKTsgfQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBnZXRQdHJPclJlZihjb25zdCBSZWZQdHI8VD4mIHApIHsgcmV0dXJuIHAuZ2V0KCk7IH0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxpbmUgVCYgZ2V0UHRyT3JSZWYoY29uc3QgUmVmPFQ+JiBw
KSB7IHJldHVybiBwLmdldCgpOyB9Ci0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEpTQ29udmVydGVyPElETEludGVyZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGlj
IEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1
cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIERldGFpbDo6Z2V0UHRyT3JSZWYodmFsdWUp
KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydE5ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+
KHZhbHVlKSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogSW50ZWdlciB0eXBl
cwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQnl0ZT4gOiBEZWZhdWx0Q29udmVy
dGVyPElETEJ5dGU+IHsKLSAgICBzdGF0aWMgaW50OF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwp
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50OEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0g
ICAgICAgICAgICByZXR1cm4gdG9JbnQ4Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdG9JbnQ4KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMQnl0ZT4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExCeXRlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVk
c0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0
KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETE9jdGV0PiA6IERl
ZmF1bHRDb252ZXJ0ZXI8SURMT2N0ZXQ+IHsKLSAgICBzdGF0aWMgdWludDhfdCBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0g
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4RW5mb3JjZVJhbmdl
KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQ4Q2xhbXAoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9VSW50OChzdGF0ZSwgdmFsdWUpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETE9jdGV0PiB7Ci0gICAg
dXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETE9jdGV0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlND
Ojpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETFNob3J0PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMU2hvcnQ+IHsKLSAgICBzdGF0aWMg
aW50MTZfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHJldHVybiB0
b0ludDE2RW5mb3JjZVJhbmdlKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b0ludDE2
Q2xhbXAoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9JbnQxNihz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVy
PElETFNob3J0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFNob3J0OjpJbXBsZW1l
bnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZh
bHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNl
OwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxh
dGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETFVuc2lnbmVkU2hvcnQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnNpZ25lZFNob3J0PiB7Ci0gICAgc3RhdGljIHVpbnQxNl90IGNvbnZlcnQoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvVUludDE2RW5mb3JjZVJhbmdlKHN0
YXRlLCB2YWx1ZSk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiB0b1VJbnQxNkNsYW1wKHN0YXRlLCB2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvVUludDE2KHN0YXRlLCB2YWx1ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMVW5zaWduZWRTaG9ydD4g
ewotICAgIHVzaW5nIFR5cGUgPSB0eXBlbmFtZSBJRExVbnNpZ25lZFNob3J0OjpJbXBsZW1lbnRh
dGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQ29udmVydGVyPElETExvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nPiB7
Ci0gICAgc3RhdGljIGlubGluZSBpbnQzMl90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
dG9JbnQzMihudW1iZXIpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQzMl90IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJFbmZvcmNlUmFuZ2Uo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIHRvSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0ludDMyKCZzdGF0ZSk7Ci0gICAg
fQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMTG9uZz4gewotICAgIHVz
aW5nIFR5cGUgPSB0eXBlbmFtZSBJRExMb25nOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpq
c051bWJlcih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVuc2lnbmVkTG9uZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewot
ICAgIHN0YXRpYyB1aW50MzJfdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
biA9IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQzMkVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50MzJDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS50b1VJbnQzMigmc3RhdGUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZz4gewotICAgIHVzaW5nIFR5cGUgPSB0eXBl
bmFtZSBJRExVbnNpZ25lZExvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVy
KHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMTG9u
Z0xvbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExMb25nTG9uZz4gewotICAgIHN0YXRpYyBpbnQ2
NF90IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
cmV0dXJuIHRvSW50NjRFbmZvcmNlUmFuZ2Uoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJu
IHRvSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
b0ludDY0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlND
b252ZXJ0ZXI8SURMTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMTG9u
Z0xvbmc6OkltcGxlbWVudGF0aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBu
ZWVkc1N0YXRlID0gZmFsc2U7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFs
T2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5zaWduZWRMb25nTG9uZz4g
OiBEZWZhdWx0Q29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICBzdGF0aWMgdWlu
dDY0X3QgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
ICAgIHJldHVybiB0b1VJbnQ2NEVuZm9yY2VSYW5nZShzdGF0ZSwgdmFsdWUpOwotICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICBy
ZXR1cm4gdG9VSW50NjRDbGFtcChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0b1VJbnQ2NChzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEpTQ29udmVydGVyPElETFVuc2lnbmVkTG9uZ0xvbmc+IHsKLSAgICB1c2luZyBUeXBlID0g
dHlwZW5hbWUgSURMVW5zaWduZWRMb25nTG9uZzo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgY29udmVydChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IEZsb2F0
aW5nIHBvaW50IHR5cGVzCi0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExGbG9hdD4g
OiBEZWZhdWx0Q29udmVydGVyPElETEZsb2F0PiB7Ci0KLSAgICBzdGF0aWMgaW5saW5lIGZsb2F0
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBk
b3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6OmlzZmluaXRl
KG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihudW1iZXIpOwotICAgIH0K
LQotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgICAgIGRv
dWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgICAgICBpZiAoVU5MSUtF
TFkoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkpCi0gICAgICAgICAgICB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG51bWJlcik7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
RmxvYXQ+IHsKLSAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgSURMRmxvYXQ6OkltcGxlbWVudGF0
aW9uVHlwZTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKU0M6OmpzTnVtYmVyKHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRmxvYXQ+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExVbnJlc3RyaWN0ZWRGbG9hdD4gewotICAgIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVy
dChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGRvdWJsZSBudW1iZXIpCi0gICAg
ewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG51bWJlcik7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGZsb2F0IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29u
dmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1l
IElETFVucmVzdHJpY3RlZEZsb2F0OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1
ZSBjb252ZXJ0KFR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc051bWJl
cih2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETERv
dWJsZT4gOiBEZWZhdWx0Q29udmVydGVyPElETERvdWJsZT4gewotICAgIHN0YXRpYyBpbmxpbmUg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBkb3VibGUgbnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFzdGQ6Omlz
ZmluaXRlKG51bWJlcikpKQotICAgICAgICAgICAgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
ZG91YmxlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICAgICAgZG91YmxlIG51bWJlciA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghc3RkOjppc2Zp
bml0ZShudW1iZXIpKSkKLSAgICAgICAgICAgIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVu
YW1lIElETERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExVbnJlc3RyaWN0
ZWREb3VibGU+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbnJlc3RyaWN0ZWREb3VibGU+IHsKLSAg
ICBzdGF0aWMgaW5saW5lIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgZG91YmxlIG51bWJlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBudW1iZXI7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGRvdWJsZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRG91YmxlPiB7Ci0gICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIElETFVucmVz
dHJpY3RlZERvdWJsZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIG5lZWRzU3RhdGUgPSBmYWxzZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVl
ZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVy
dChUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUp
OwotICAgIH0KLQotICAgIC8vIEFkZCBvdmVybG9hZCBmb3IgTWVkaWFUaW1lLgotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChNZWRpYVRpbWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZS50b0RvdWJsZSgpKTsKLSAgICB9Ci19OwotCi0vLyBN
QVJLOiAtCi0vLyBNQVJLOiBTdHJpbmcgdHlwZXMKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVy
dGVyPElETERPTVN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETERPTVN0cmluZz4gewotICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0
cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAo
Y29uZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxs
QXNFbXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExET01TdHJpbmc+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUoJnN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElE
TEJ5dGVTdHJpbmc+IDogRGVmYXVsdENvbnZlcnRlcjxJRExCeXRlU3RyaW5nPiB7Ci0gICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gU3RyaW5n
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb25m
aWd1cmF0aW9uID09IFN0cmluZ0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpUcmVhdE51bGxBc0Vt
cHR5U3RyaW5nICYmIHZhbHVlLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRvQnl0ZVN0cmluZyhzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETEJ5dGVTdHJpbmc+
IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0KLSAgICBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6anNTdHJpbmdXaXRoQ2FjaGUo
JnN0YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVy
PElETFVTVlN0cmluZz4gOiBEZWZhdWx0Q29udmVydGVyPElETFVTVlN0cmluZz4gewotICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgU3RyaW5nQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiA9IFN0cmlu
Z0NvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpCi0gICAgewotICAgICAgICBpZiAoY29u
ZmlndXJhdGlvbiA9PSBTdHJpbmdDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6VHJlYXROdWxsQXNF
bXB0eVN0cmluZyAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwotICAgICAgICByZXR1cm4gdmFsdWVUb1VTVlN0cmluZyhzdGF0ZSwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETFVTVlN0cmluZz4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRp
YyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSlNDOjpqc1N0cmluZ1dpdGhDYWNoZSgm
c3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBPYmplY3Qg
dHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBDb252ZXJ0ZXI8SURMT2JqZWN0PiA6IERlZmF1bHRD
b252ZXJ0ZXI8SURMT2JqZWN0PiB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhy
b3dlciA9IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgotICAgIHN0YXRpYyBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlLCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRo
cm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgZXhjZXB0aW9uVGhyb3dlcihzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIHsgdm0sIEpTQzo6YXNPYmplY3QodmFsdWUpIH07Ci0gICAgfQotfTsKLQot
Ly8gTUFSSzogLQotLy8gTUFSSzogQXJyYXktbGlrZSB0eXBlcwotCi1uYW1lc3BhY2UgRGV0YWls
IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBHZW5lcmljU2Vx
dWVuY2VDb252ZXJ0ZXIgewotICAgICAgICB1c2luZyBSZXR1cm5UeXBlID0gVmVjdG9yPHR5cGVu
YW1lIElETFR5cGU6OkltcGxlbWVudGF0aW9uVHlwZT47Ci0KLSAgICAgICAgc3RhdGljIFJldHVy
blR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBSZXR1cm5UeXBlIHJlc3VsdDsKLSAgICAgICAg
ICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwganNPYmplY3QsIFsmcmVzdWx0XShKU0M6OlZN
JiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAg
ICAgICAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
ICAgICAgICAgICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNv
bnZlcnQoKnN0YXRlLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlKSk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgLy8gU3BlY2lhbGl6YXRpb24gZm9yIG51bWVyaWMgdHlwZXMKLSAgICAvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciB0aGUgSURMRmxvYXRpbmdQb2ludFR5cGVzIGFuZCBJ
RExMb25nLiBUbyBhZGQKLSAgICAvLyBzdXBwb3J0IGZvciBtb3JlIG51bWVyaWMgdHlwZXMsIGFk
ZCBhbiBvdmVybG9hZCBvZiBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQgdGhhdAotICAgIC8v
IHRha2VzIGFuIEV4ZWNTdGF0ZSwgVGhyb3dTY29wZSwgZG91YmxlIGFzIGl0cyBhcmd1bWVudHMu
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSURMVHlwZT4KLSAgICBzdHJ1Y3QgTnVtZXJpY1NlcXVl
bmNlQ29udmVydGVyIHsKLSAgICAgICAgdXNpbmcgR2VuZXJpY0NvbnZlcnRlciA9IEdlbmVyaWNT
ZXF1ZW5jZUNvbnZlcnRlcjxJRExUeXBlPjsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5
cGVuYW1lIEdlbmVyaWNDb252ZXJ0ZXI6OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJl
dHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NlcXVlbmNl
VHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6aXNKU0FycmF5KG9iamVjdCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUs
IG9iamVjdCk7Ci0KLSAgICAgICAgICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBKU0M6OmFzQXJy
YXkob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghYXJyYXktPmdsb2JhbE9iamVjdCgpLT5pc0Fy
cmF5SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyaWNDb252ZXJ0ZXI6OmNvbnZlcnQoc3RhdGUsIG9iamVjdCk7Ci0KLSAg
ICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKLQotICAgICAgICAg
ICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC50cnlSZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgcmln
aHQgZXhjZXB0aW9uIHRvIHRocm93PwotICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEpTQzo6SW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZSA9IGFycmF5LT5p
bmRleGluZ1R5cGUoKSAmIEpTQzo6SW5kZXhpbmdTaGFwZU1hc2s7Ci0KLSAgICAgICAgICAgIGlm
IChpbmRleGluZ1R5cGUgPT0gSlNDOjpDb250aWd1b3VzU2hhcGUpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmJ1dHRlcmZseSgpLT5jb250aWd1b3VzKClb
aV0uZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXhWYWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1
ZSA9IENvbnZlcnRlcjxJRExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoaW5kZXhpbmdUeXBlID09IEpTQzo6SW50MzJTaGFwZSkgewotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNvbnRpZ3Vv
dXNJbnQzMigpW2ldLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWluZGV4VmFs
dWUgfHwgaW5kZXhWYWx1ZS5pc0ludDMyKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KDApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQudW5jaGVja2VkQXBwZW5kKGluZGV4VmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGluZGV4aW5nVHlwZSA9PSBKU0M6OkRvdWJsZVNoYXBlKSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSBhcnJheS0+YnV0dGVyZmx5KCktPmNv
bnRpZ3VvdXNEb3VibGUoKVtpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZDo6aXNuYW4o
ZG91YmxlVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFw
cGVuZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0
YXRlLCBzY29wZSwgZG91YmxlVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbmRleFZhbHVlID0gYXJyYXktPmdldERp
cmVjdEluZGV4KCZzdGF0ZSwgaSk7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoMCk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIGluZGV4VmFsdWUp
OwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0ZWRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlciB7
Ci0gICAgICAgIHVzaW5nIEdlbmVyaWNDb252ZXJ0ZXIgPSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMVHlwZT47Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmlj
Q29udmVydGVyOjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNvbnZl
cnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0
ZSwgc2NvcGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUp
OwotICAgICAgICAgICAgaWYgKCFKU0M6OmlzSlNBcnJheShvYmplY3QpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBHZW5lcmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0g
ICAgICAgICAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gSlNDOjphc0FycmF5KG9iamVjdCk7Ci0g
ICAgICAgICAgICBpZiAoIWFycmF5LT5nbG9iYWxPYmplY3QoKS0+aXNBcnJheUl0ZXJhdG9yUHJv
dG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmljQ29udmVydGVyOjpjb252ZXJ0KHN0YXRlLCBvYmplY3QpOwotCi0gICAgICAgICAgICB1bnNp
Z25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIFJldHVyblR5cGUg
cmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHQudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXMgdGhlIHJpZ2h0IGV4Y2VwdGlvbiB0
byB0aHJvdz8KLSAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBKU0M6OkluZGV4aW5nVHlwZSBpbmRleGluZ1R5cGUgPSBhcnJheS0+aW5kZXhpbmdUeXBlKCkg
JiBKU0M6OkluZGV4aW5nU2hhcGVNYXNrOwotCi0gICAgICAgICAgICBpZiAoaW5kZXhpbmdUeXBl
ID09IEpTQzo6Q29udGlndW91c1NoYXBlKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gaW5k
ZXhWYWx1ZSA9IGFycmF5LT5idXR0ZXJmbHkoKS0+Y29udGlndW91cygpW2ldLmdldCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAgICAgICAgICAg
IGF1dG8gY29udmVydGVkVmFsdWUgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUs
IGluZGV4VmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQo
Y29udmVydGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBhdXRvIGluZGV4VmFsdWUg
PSBhcnJheS0+Z2V0RGlyZWN0SW5kZXgoJnN0YXRlLCBpKTsKLSAgICAgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRl
eFZhbHVlKQotICAgICAgICAgICAgICAgICAgICBpbmRleFZhbHVlID0gSlNDOjpqc1VuZGVmaW5l
ZCgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IENvbnZlcnRlcjxJ
RExUeXBlPjo6Y29udmVydChzdGF0ZSwgaW5kZXhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRlZFZhbHVlKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9OwotCi0g
ICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPiB7Ci0g
ICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMTG9uZz46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29u
dmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExMb25nPjo6
Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMRmxvYXQ+IHsKLSAgICAgICAgdXNp
bmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9h
dD46OlJldHVyblR5cGU7Ci0KLSAgICAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIE51bWVyaWNTZXF1ZW5jZUNvbnZlcnRlcjxJRExGbG9hdD46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+Ci0gICAg
c3RydWN0IFNlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZEZsb2F0PiB7Ci0gICAgICAg
IHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBSZXR1cm5U
eXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0ZXI8SURM
VW5yZXN0cmljdGVkRmxvYXQ+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9OwotCi0gICAgdGVtcGxhdGU8PgotICAgIHN0cnVjdCBTZXF1ZW5jZUNvbnZlcnRlcjxJRExE
b3VibGU+IHsKLSAgICAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IHR5cGVuYW1lIEdlbmVyaWNTZXF1
ZW5jZUNvbnZlcnRlcjxJRExEb3VibGU+OjpSZXR1cm5UeXBlOwotCi0gICAgICAgIHN0YXRpYyBS
ZXR1cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOdW1lcmljU2VxdWVuY2VDb252ZXJ0
ZXI8SURMRG91YmxlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHRlbXBsYXRlPD4KLSAgICBzdHJ1Y3QgU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0
cmljdGVkRG91YmxlPiB7Ci0gICAgICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBHZW5l
cmljU2VxdWVuY2VDb252ZXJ0ZXI8SURMVW5yZXN0cmljdGVkRG91YmxlPjo6UmV0dXJuVHlwZTsK
LQotICAgICAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gTnVt
ZXJpY1NlcXVlbmNlQ29udmVydGVyPElETFVucmVzdHJpY3RlZERvdWJsZT46OmNvbnZlcnQoc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgfQotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMU2VxdWVuY2U8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExT
ZXF1ZW5jZTxUPj4gewotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBlbmFtZSBEZXRhaWw6OlNl
cXVlbmNlQ29udmVydGVyPFQ+OjpSZXR1cm5UeXBlOwotCi0gICAgc3RhdGljIFJldHVyblR5cGUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBEZXRhaWw6OlNlcXVlbmNlQ29udmVydGVyPFQ+Ojpjb252ZXJ0KHN0
YXRlLCB2YWx1ZSk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpT
Q29udmVydGVyPElETFNlcXVlbmNlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IHRydWU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VSwgaW5s
aW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50
QnVmZmVyIGxpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKHRvSlM8VD4oZXhlYywgZ2xvYmFsT2JqZWN0LCBlbGVtZW50KSk7
Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KCZleGVjLCBudWxscHRyLCAmZ2xv
YmFsT2JqZWN0LCBsaXN0KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgQ29udmVydGVyPElETEZyb3plbkFycmF5PFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRnJv
emVuQXJyYXk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgRGV0YWlsOjpT
ZXF1ZW5jZUNvbnZlcnRlcjxUPjo6UmV0dXJuVHlwZTsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBl
IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICByZXR1cm4gRGV0YWlsOjpTZXF1ZW5jZUNvbnZlcnRlcjxUPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBK
U0NvbnZlcnRlcjxJRExGcm96ZW5BcnJheTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9i
YWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0
ZSYgZXhlYywgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFUs
IGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB2ZWN0b3IpCi0g
ICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTPFQ+KGV4ZWMsIGdsb2JhbE9iamVjdCwgZWxlbWVu
dCkpOwotICAgICAgICBhdXRvKiBhcnJheSA9IEpTQzo6Y29uc3RydWN0QXJyYXkoJmV4ZWMsIG51
bGxwdHIsICZnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgICAgICByZXR1cm4gSlNDOjpvYmplY3RD
b25zdHJ1Y3RvckZyZWV6ZSgmZXhlYywgYXJyYXkpOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0K
LS8vIE1BUks6IFJlY29yZCB0eXBlCi0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIElETFN0cmluZ1R5cGU+Ci0gICAgc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI7
Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETERPTVN0cmlu
Zz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpZGVudGlmaWVyLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPD4gc3RydWN0IElkZW50aWZpZXJDb252ZXJ0ZXI8SURMQnl0ZVN0cmluZz4gewotICAgICAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBKU0M6
OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBp
ZGVudGlmaWVyVG9CeXRlU3RyaW5nKHN0YXRlLCBpZGVudGlmaWVyKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJZGVudGlmaWVyQ29udmVydGVyPElETFVTVlN0
cmluZz4gewotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBKU0M6OklkZW50aWZpZXImIGlkZW50aWZpZXIpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoc3RhdGUsIGlkZW50aWZpZXIpOwot
ICAgICAgICB9Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSywgdHlwZW5hbWUgVj4g
c3RydWN0IENvbnZlcnRlcjxJRExSZWNvcmQ8SywgVj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExS
ZWNvcmQ8SywgVj4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gdHlwZW5hbWUgSURMUmVjb3Jk
PEssIFY+OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0gICAgdXNpbmcgS2V5VHlwZSA9IHR5cGVuYW1l
IEs6OkltcGxlbWVudGF0aW9uVHlwZTsKLSAgICB1c2luZyBWYWx1ZVR5cGUgPSB0eXBlbmFtZSBW
OjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICBzdGF0aWMgUmV0dXJuVHlwZSBjb252ZXJ0KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBp
bnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uCi0gICAgICAgIC8vIDIuIElmIFR5cGUoTykgaXMgVW5k
ZWZpbmVkIG9yIE51bGwsIHJldHVybiByZXN1bHQuCi0gICAgICAgIGlmICh2YWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgCi0gICAgICAg
IC8vIDMuIElmIFR5cGUoTykgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuCi0gICAg
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKLSAgICAKLSAgICAgICAgUmV0dXJuVHlwZSByZXN1bHQ7Ci0gICAgCi0gICAgICAgIC8vIDQu
IExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuCi0gICAgICAgIEpTQzo6UHJv
cGVydHlOYW1lQXJyYXkga2V5cygmdm0sIEpTQzo6UHJvcGVydHlOYW1lTW9kZTo6U3RyaW5ncyk7
Ci0gICAgICAgIG9iamVjdC0+Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsICZzdGF0ZSwga2V5
cywgSlNDOjpFbnVtZXJhdGlvbk1vZGUoKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgLy8gNS4gUmVwZWF0LCBmb3IgZWFjaCBlbGVtZW50IGtl
eSBvZiBrZXlzIGluIExpc3Qgb3JkZXI6Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDoga2V5cykg
ewotICAgICAgICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShr
ZXkpLgotICAgICAgICAgICAgSlNDOjpQcm9wZXJ0eURlc2NyaXB0b3IgZGVzY3JpcHRvcjsKLSAg
ICAgICAgICAgIGJvb2wgZGlkR2V0RGVzY3JpcHRvciA9IG9iamVjdC0+Z2V0T3duUHJvcGVydHlE
ZXNjcmlwdG9yKCZzdGF0ZSwga2V5LCBkZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAgICAgICAgIGlmICghZGlkR2V0RGVzY3Jp
cHRvcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gMi4gSWYg
ZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciBlbnVtZXJhYmxlIC8gdW5kZWZpbmVkLCBvciBpcyB0aGlzIGhhbmRsZWQgYnkgdGhlIGRlZmF1
bHQKLSAgICAgICAgICAgIC8vIGVudW1lcmF0aW9uIG1vZGU/Ci0KLSAgICAgICAgICAgIGlmICgh
ZGVzY3JpcHRvci52YWx1ZSgpLmlzVW5kZWZpbmVkKCkgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxl
KCkpIHsKLSAgICAgICAgICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRl
ZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLgotICAgICAgICAgICAgICAgIGF1dG8gdHlwZWRL
ZXkgPSBEZXRhaWw6OklkZW50aWZpZXJDb252ZXJ0ZXI8Sz46OmNvbnZlcnQoc3RhdGUsIGtleSk7
Ci0KLSAgICAgICAgICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS4KLSAg
ICAgICAgICAgICAgICBhdXRvIHN1YlZhbHVlID0gb2JqZWN0LT5nZXQoJnN0YXRlLCBrZXkpOwot
ICAgICAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4g
SURMIHZhbHVlIG9mIHR5cGUgVi4KLSAgICAgICAgICAgICAgICBhdXRvIHR5cGVkVmFsdWUgPSBD
b252ZXJ0ZXI8Vj46OmNvbnZlcnQoc3RhdGUsIHN1YlZhbHVlKTsKLSAgICAgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIC8vIDQuIElmIHR5cGVkS2V5IGlzIGFscmVhZHkgYSBrZXkgaW4gcmVzdWx0LCBz
ZXQgaXRzIHZhbHVlIHRvIHR5cGVkVmFsdWUuCi0gICAgICAgICAgICAgICAgLy8gTm90ZTogVGhp
cyBjYW4gaGFwcGVuIHdoZW4gTyBpcyBhIHByb3h5IG9iamVjdC4KLSAgICAgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAvLyA1LiBPdGhlcndpc2UsIGFwcGVuZCB0byByZXN1bHQgYSBtYXBwaW5nICh0eXBlZEtl
eSwgdHlwZWRWYWx1ZSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh7IHR5cGVkS2V5
LCB0eXBlZFZhbHVlIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
Ni4gUmV0dXJuIHJlc3VsdC4KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBLLCB0eXBlbmFtZSBWPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMUmVj
b3JkPEssIFY+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVl
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXBUeXBlPgotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IE1hcFR5cGUmIG1hcCkKLSAgICB7Ci0gICAgICAgIGF1dG8mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICAKLSAgICAgICAgLy8gMS4gTGV0IHJlc3VsdCBiZSAhIE9iamVjdENyZWF0
ZSglT2JqZWN0UHJvdG90eXBlJSkuCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gY29uc3RydWN0RW1w
dHlPYmplY3QoJnN0YXRlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIFJlcGVhdCwgZm9yIGVh
Y2ggbWFwcGluZyAoa2V5LCB2YWx1ZSkgaW4gRDoKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBr
ZXlWYWx1ZVBhaXIgOiBtYXApIHsKLSAgICAgICAgICAgIC8vIDEuIExldCBlc0tleSBiZSBrZXkg
Y29udmVydGVkIHRvIGFuIEVDTUFTY3JpcHQgdmFsdWUuCi0gICAgICAgICAgICAvLyBOb3RlLCB0
aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLCBhcyB3ZSBuZWVkIHRoZSBrZXkgdG8gYmUKLSAgICAg
ICAgICAgIC8vIGFuIElkZW50aWZpZXIsIG5vdCBhIEpTVmFsdWUuCi0KLSAgICAgICAgICAgIC8v
IDIuIExldCBlc1ZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBFQ01BU2NyaXB0IHZhbHVl
LgotICAgICAgICAgICAgYXV0byBlc1ZhbHVlID0gdG9KUzxWPihzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBrZXlWYWx1ZVBhaXIudmFsdWUpOwotCi0gICAgICAgICAgICAvLyAzLiBMZXQgY3JlYXRlZCBi
ZSAhIENyZWF0ZURhdGFQcm9wZXJ0eShyZXN1bHQsIGVzS2V5LCBlc1ZhbHVlKS4KLSAgICAgICAg
ICAgIGJvb2wgY3JlYXRlZCA9IHJlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBrZXlWYWx1ZVBhaXIua2V5KSwgZXNWYWx1ZSk7Ci0KLSAgICAgICAg
ICAgIC8vIDQuIEFzc2VydDogY3JlYXRlZCBpcyB0cnVlLgotICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChjcmVhdGVkLCBjcmVhdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIDMuIFJldHVy
biByZXN1bHQuCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfTsKLQotLy8gTUFSSzog
LQotLy8gTUFSSzogRGljdGlvbmFyeSB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBDb252ZXJ0ZXI8SURMRGljdGlvbmFyeTxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElETERpY3Rp
b25hcnk8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gVDsKLQotICAgIHN0YXRpYyBSZXR1
cm5UeXBlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gY29udmVydERpY3Rpb25hcnk8VD4oc3RhdGUsIHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8
SURMRGljdGlvbmFyeTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRl
ID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0
cnVlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgZGljdGlvbmFy
eSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0RGljdGlvbmFyeVRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgZGljdGlvbmFyeSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFS
SzogRW51bWVyYXRpb24gdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVy
dGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRW51bWVyYXRpb248
VD4+IHsKLSAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRFbnVtZXJhdGlvbjxU
PihzdGF0ZSwgdmFsdWUpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKU0NvbnZlcnRlcjxJRExFbnVtZXJhdGlvbjxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNH
bG9iYWxPYmplY3QgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChK
U0M6OkV4ZWNTdGF0ZSYgZXhlYywgVCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb252
ZXJ0RW51bWVyYXRpb25Ub0pTKGV4ZWMsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBDYWxsYmFjayBmdW5jdGlvbiB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBEZWZhdWx0Q29udmVy
dGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNl
cHRpb25UaHJvd2VyID0gRGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+Ci0gICAgc3RhdGljIFJlZlB0
cjxUPiBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0
aW9uVGhyb3dlciA9IEV4Y2VwdGlvblRocm93ZXIoKSkKLSAgICB7Ci0gICAgICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgICAgIGlmICghdmFsdWUuaXNGdW5jdGlvbigpKSB7Ci0gICAgICAgICAg
ICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFQ6OmNyZWF0ZShKU0M6
OmFzT2JqZWN0KHZhbHVlKSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29udmVydGVyPElETENhbGxiYWNrRnVuY3Rpb248VD4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IGZhbHNlOwotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZhbHNlOwotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KGNvbnN0IFUm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvSlMoRGV0YWlsOjpnZXRQdHJPclJlZih2
YWx1ZSkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgc3RhdGljIEpT
Qzo6SlNWYWx1ZSBjb252ZXJ0TmV3bHlDcmVhdGVkKFUmJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZSkpOwotICAgIH0K
LX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IENhbGxiYWNrIGludGVyZmFjZSB0eXBlCi0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tJbnRlcmZhY2U8
VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExDYWxsYmFja0ludGVyZmFjZTxUPj4gewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KLSAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2Vw
dGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQotICAg
IHsKLSAgICAgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25UaHJvd2VyKHN0YXRlLCBzY29wZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUOjpj
cmVhdGUoSlNDOjphc09iamVjdCh2YWx1ZSksICZnbG9iYWxPYmplY3QpOwotICAgIH0KLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBKU0NvbnZlcnRlcjxJRExDYWxsYmFja0ludGVy
ZmFjZTxUPj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gZmFsc2U7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gZmFsc2U7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZl
cnQoY29uc3QgVSYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdG9KUyhEZXRhaWw6Omdl
dFB0ck9yUmVmKHZhbHVlKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnROZXdseUNyZWF0ZWQoVSYmIHZhbHVlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RkOjpmb3J3YXJkPFU+KHZhbHVl
KSk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogVW5pb24gdHlwZQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZSBULCBib29sIGVuYWJsZWQ+Ci1zdHJ1
Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblR5cGUs
IHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0dXJuVHlwZSwgVCwg
dHJ1ZT4gewotICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gUmV0dXJuVHlwZShDb252ZXJ0ZXI8VD46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKSk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlwZW5hbWUgVD4KLXN0
cnVjdCBDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBULCBmYWxzZT4gewotICAgIHN0
YXRpYyBzdGQ6Om9wdGlvbmFsPFJldHVyblR5cGU+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0K
LX07Ci0KLW5hbWVzcGFjZSBEZXRhaWwgewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpc3QsIGJv
b2wgY29uZGl0aW9uPgotICAgIHN0cnVjdCBDb25kaXRpb25hbEZyb250OwotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgTGlzdD4KLSAgICBzdHJ1Y3QgQ29uZGl0aW9uYWxGcm9udDxMaXN0LCB0cnVl
PgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IGJyaWdhbmQ6OmZyb250PExpc3Q+OwotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaXN0PgotICAgIHN0cnVjdCBDb25kaXRpb25h
bEZyb250PExpc3QsIGZhbHNlPgotICAgIHsKLSAgICAgICAgdXNpbmcgdHlwZSA9IHZvaWQ7Ci0g
ICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlzdCwgYm9vbCBjb25kaXRpb24+Ci11c2lu
ZyBDb25kaXRpb25hbEZyb250ID0gdHlwZW5hbWUgRGV0YWlsOjpDb25kaXRpb25hbEZyb250PExp
c3QsIGNvbmRpdGlvbj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBD
b252ZXJ0ZXI8SURMVW5pb248VC4uLj4+IDogRGVmYXVsdENvbnZlcnRlcjxJRExVbmlvbjxULi4u
Pj4gewotICAgIHVzaW5nIFR5cGUgPSBJRExVbmlvbjxULi4uPjsKLSAgICB1c2luZyBUeXBlTGlz
dCA9IHR5cGVuYW1lIFR5cGU6OlR5cGVMaXN0OwotICAgIHVzaW5nIFJldHVyblR5cGUgPSB0eXBl
bmFtZSBUeXBlOjpJbXBsZW1lbnRhdGlvblR5cGU7Ci0KLSAgICB1c2luZyBOdW1lcmljVHlwZUxp
c3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlwZUxpc3QsIElzSURMTnVtYmVyPGJyaWdhbmQ6Ol8xPj47
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZOdW1lcmljVHlwZXMgPSBicmln
YW5kOjpzaXplPE51bWVyaWNUeXBlTGlzdD46OnZhbHVlOwotICAgIHN0YXRpY19hc3NlcnQobnVt
YmVyT2ZOdW1lcmljVHlwZXMgPT0gMCB8fCBudW1iZXJPZk51bWVyaWNUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSBudW1lcmljIHR5cGVzIGluIGFuIElETFVuaW9uLiIpOwotICAgIHVz
aW5nIE51bWVyaWNUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxOdW1lcmljVHlwZUxpc3QsIG51bWJl
ck9mTnVtZXJpY1R5cGVzICE9IDA+OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28g
Y2hlY2sgZm9yIElETEVudW1lcmF0aW9uPFQ+LgotICAgIHVzaW5nIFN0cmluZ1R5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBzdGQ6OmlzX2Jhc2Vfb2Y8SURMU3RyaW5nLCBicmln
YW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mU3RyaW5nVHlw
ZXMgPSBicmlnYW5kOjpzaXplPFN0cmluZ1R5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fz
c2VydChudW1iZXJPZlN0cmluZ1R5cGVzID09IDAgfHwgbnVtYmVyT2ZTdHJpbmdUeXBlcyA9PSAx
LCAiVGhlcmUgY2FuIGJlIDAgb3IgMSBzdHJpbmcgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0g
ICAgdXNpbmcgU3RyaW5nVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8U3RyaW5nVHlwZUxpc3QsIG51
bWJlck9mU3RyaW5nVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBTZXF1ZW5jZVR5cGVMaXN0ID0g
YnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFNlcXVlbmNlPGJyaWdhbmQ6Ol8xPj47Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZTZXF1ZW5jZVR5cGVzID0gYnJpZ2Fu
ZDo6c2l6ZTxTZXF1ZW5jZVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChudW1i
ZXJPZlNlcXVlbmNlVHlwZXMgPT0gMCB8fCBudW1iZXJPZlNlcXVlbmNlVHlwZXMgPT0gMSwgIlRo
ZXJlIGNhbiBiZSAwIG9yIDEgc2VxdWVuY2UgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAg
dXNpbmcgU2VxdWVuY2VUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxTZXF1ZW5jZVR5cGVMaXN0LCBu
dW1iZXJPZlNlcXVlbmNlVHlwZXMgIT0gMD47Ci0KLSAgICB1c2luZyBGcm96ZW5BcnJheVR5cGVM
aXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETEZyb3plbkFycmF5PGJyaWdhbmQ6
Ol8xPj47Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZGcm96ZW5BcnJheVR5
cGVzID0gYnJpZ2FuZDo6c2l6ZTxGcm96ZW5BcnJheVR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3Rh
dGljX2Fzc2VydChudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgPT0gMCB8fCBudW1iZXJPZkZyb3pl
bkFycmF5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBiZSAwIG9yIDEgRnJvemVuQXJyYXkgdHlwZXMg
aW4gYW4gSURMVW5pb24uIik7Ci0gICAgdXNpbmcgRnJvemVuQXJyYXlUeXBlID0gQ29uZGl0aW9u
YWxGcm9udDxGcm96ZW5BcnJheVR5cGVMaXN0LCBudW1iZXJPZkZyb3plbkFycmF5VHlwZXMgIT0g
MD47Ci0KLSAgICB1c2luZyBEaWN0aW9uYXJ5VHlwZUxpc3QgPSBicmlnYW5kOjpmaWx0ZXI8VHlw
ZUxpc3QsIElzSURMRGljdGlvbmFyeTxicmlnYW5kOjpfMT4+OwotICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bWJlck9mRGljdGlvbmFyeVR5cGVzID0gYnJpZ2FuZDo6c2l6ZTxEaWN0aW9u
YXJ5VHlwZUxpc3Q+Ojp2YWx1ZTsKLSAgICBzdGF0aWNfYXNzZXJ0KG51bWJlck9mRGljdGlvbmFy
eVR5cGVzID09IDAgfHwgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgPT0gMSwgIlRoZXJlIGNhbiBi
ZSAwIG9yIDEgZGljdGlvbmFyeSB0eXBlcyBpbiBhbiBJRExVbmlvbi4iKTsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgaGFzRGljdGlvbmFyeVR5cGUgPSBudW1iZXJPZkRpY3Rpb25hcnlUeXBl
cyAhPSAwOwotICAgIHVzaW5nIERpY3Rpb25hcnlUeXBlID0gQ29uZGl0aW9uYWxGcm9udDxEaWN0
aW9uYXJ5VHlwZUxpc3QsIGhhc0RpY3Rpb25hcnlUeXBlPjsKLQotICAgIHVzaW5nIFJlY29yZFR5
cGVMaXN0ID0gYnJpZ2FuZDo6ZmlsdGVyPFR5cGVMaXN0LCBJc0lETFJlY29yZDxicmlnYW5kOjpf
MT4+OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVjb3JkVHlwZXMgPSBi
cmlnYW5kOjpzaXplPFJlY29yZFR5cGVMaXN0Pjo6dmFsdWU7Ci0gICAgc3RhdGljX2Fzc2VydChu
dW1iZXJPZlJlY29yZFR5cGVzID09IDAgfHwgbnVtYmVyT2ZSZWNvcmRUeXBlcyA9PSAxLCAiVGhl
cmUgY2FuIGJlIDAgb3IgMSByZWNvcmQgdHlwZXMgaW4gYW4gSURMVW5pb24uIik7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIGhhc1JlY29yZFR5cGUgPSBudW1iZXJPZlJlY29yZFR5cGVzICE9
IDA7Ci0gICAgdXNpbmcgUmVjb3JkVHlwZSA9IENvbmRpdGlvbmFsRnJvbnQ8UmVjb3JkVHlwZUxp
c3QsIGhhc1JlY29yZFR5cGU+OwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGhhc09iamVj
dFR5cGUgPSAobnVtYmVyT2ZTZXF1ZW5jZVR5cGVzICsgbnVtYmVyT2ZGcm96ZW5BcnJheVR5cGVz
ICsgbnVtYmVyT2ZEaWN0aW9uYXJ5VHlwZXMgKyBudW1iZXJPZlJlY29yZFR5cGVzKSA+IDA7Ci0K
LSAgICB1c2luZyBJbnRlcmZhY2VUeXBlTGlzdCA9IGJyaWdhbmQ6OmZpbHRlcjxUeXBlTGlzdCwg
SXNJRExJbnRlcmZhY2U8YnJpZ2FuZDo6XzE+PjsKLQotICAgIHN0YXRpYyBSZXR1cm5UeXBlIGNv
bnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAvLyAxLiBJZiB0aGUgdW5pb24gdHlw
ZSBpbmNsdWRlcyBhIG51bGxhYmxlIHR5cGUgYW5kIFYgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRo
ZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgbnVsbC4KLSAgICAgICAgY29uc3RleHByIGJvb2wgaGFz
TnVsbFR5cGUgPSBicmlnYW5kOjphbnk8VHlwZUxpc3QsIHN0ZDo6aXNfc2FtZTxJRExOdWxsLCBi
cmlnYW5kOjpfMT4+Ojp2YWx1ZTsKLSAgICAgICAgaWYgKGhhc051bGxUeXBlKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gc3RkOjptb3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRl
cjxSZXR1cm5UeXBlLCBJRExOdWxsLCBoYXNOdWxsVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMi4gTGV0IHR5cGVz
IGJlIHRoZSBmbGF0dGVuZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiB0eXBlLgotICAgICAg
ICAvLyBOT1RFOiBVbmlvbiBpcyBleHBlY3RlZCB0byBiZSBwcmUtZmxhdHRlbnRlZC4KLSAgICAg
ICAgCi0gICAgICAgIC8vIDMuIElmIFYgaXMgbnVsbCBvciB1bmRlZmluZWQgdGhlbjoKLSAgICAg
ICAgaWYgKGhhc0RpY3Rpb25hcnlUeXBlIHx8IGhhc1JlY29yZFR5cGUpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAg
IDEuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBlLCB0aGVuIHJldHVybiB0aGUg
cmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IGRpY3Rpb25hcnkgdHlwZS4KLSAgICAgICAg
ICAgICAgICBpZiAoaGFzRGljdGlvbmFyeVR5cGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4g
dGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAg
ICAgICAgICBpZiAoaGFzUmVjb3JkVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgUmVjb3JkVHlwZSwgaGFzUmVjb3JkVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KS52YWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDQuIElm
IFYgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBl
cyBpbmNsdWRlcyBhbiBpbnRlcmZhY2UgdHlwZSB0aGF0IFYgaW1wbGVtZW50cywgdGhlbiByZXR1
cm4gdGhlIElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAg
ICAgICAgLy8gICAgIDIuIElmIHR5cGVzIGluY2x1ZGVzIG9iamVjdCwgdGhlbiByZXR1cm4gdGhl
IElETCB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgVi4KLSAgICAgICAg
Ly8gICAgICAgICAoRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvYmplY3QgYW5kIHN0ZXAgNC4yKQot
ICAgICAgICBpZiAoYnJpZ2FuZDo6YW55PFR5cGVMaXN0LCBJc0lETEludGVyZmFjZTxicmlnYW5k
OjpfMT4+Ojp2YWx1ZSkgewotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxSZXR1cm5UeXBlPiBy
ZXR1cm5WYWx1ZTsKLSAgICAgICAgICAgIGJyaWdhbmQ6OmZvcl9lYWNoPEludGVyZmFjZVR5cGVM
aXN0PihbJl0oYXV0byYmIHR5cGUpIHsKLSAgICAgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICB1c2luZyBUeXBlID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVyZW5jZTxk
ZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7Ci0gICAgICAgICAgICAgICAgdXNpbmcgSW1wbGVt
ZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotICAgICAg
ICAgICAgICAgIHVzaW5nIFJhd1R5cGUgPSB0eXBlbmFtZSBUeXBlOjpSYXdUeXBlOwotICAgICAg
ICAgICAgICAgIHVzaW5nIFdyYXBwZXJUeXBlID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPFJhd1R5cGU+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICAgICAgICAgICAgICBhdXRv
IGNhc3RlZFZhbHVlID0gV3JhcHBlclR5cGU6OnRvV3JhcHBlZCh2bSwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgIGlmICghY2FzdGVkVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFJldHVyblR5
cGUoSW1wbGVtZW50YXRpb25UeXBlKGNhc3RlZFZhbHVlKSk7Ci0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZN
b3ZlKHJldHVyblZhbHVlLnZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIHN0ZXBzIDUgLSAxMC4KLQotICAgICAgICAvLyAxMS4g
SWYgViBpcyBhbnkga2luZCBvZiBvYmplY3QsIHRoZW46Ci0gICAgICAgIGlmIChoYXNPYmplY3RU
eXBlKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBKU0M6OkpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlm
IChjZWxsLT5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byBvcHRpbWl6ZSB0aGUgZm9sbG93aW5nIGNvZGUgYnkgbWFraW5nIHVz
ZQotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGFuIG9iamVjdC4gCi0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIHNlcXVlbmNlIHR5cGUs
IHRoZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgMS4gTGV0IG1ldGhvZCBiZSB0
aGUgcmVzdWx0IG9mIEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS4KLSAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAyLiBSZXR1cm5JZkFicnVwdChtZXRob2QpLgotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgIDMuIElmIG1ldGhvZCBpcyBub3QgdW5kZWZpbmVkLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBjcmVhdGluZyBhCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAg
c2VxdWVuY2Ugb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLiAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGhhc1NlcXVlbmNlVHlwZSA9IG51bWJlck9mU2Vx
dWVuY2VUeXBlcyAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU2VxdWVuY2VUeXBl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc0l0ZXJhdG9yID0gaGFzSXRlcmF0
b3JNZXRob2Qoc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIFJldHVyblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaGFzSXRlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8UmV0
dXJuVHlwZSwgU2VxdWVuY2VUeXBlLCBoYXNTZXF1ZW5jZVR5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2
YWx1ZSkudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgMi4gSWYgdHlwZXMgaW5jbHVkZXMgYSBmcm96ZW4gYXJyYXkgdHlwZSwgdGhl
bjoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAxLiBMZXQgbWV0aG9kIGJlIHRoZSBy
ZXN1bHQgb2YgR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIDIuIFJldHVybklmQWJydXB0KG1ldGhvZCkuCi0gICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICAgMy4gSWYgbWV0aG9kIGlzIG5vdCB1bmRlZmluZWQsIHJldHVybiB0aGUgcmVz
dWx0IG9mIGNyZWF0aW5nIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICBmcm96
ZW4gYXJyYXkgb2YgdGhhdCB0eXBlIGZyb20gViBhbmQgbWV0aG9kLgotICAgICAgICAgICAgICAg
ICAgICBjb25zdGV4cHIgYm9vbCBoYXNGcm96ZW5BcnJheVR5cGUgPSBudW1iZXJPZkZyb3plbkFy
cmF5VHlwZXMgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0Zyb3plbkFycmF5VHlw
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNJdGVyYXRvciA9IGhhc0l0ZXJh
dG9yTWV0aG9kKHN0YXRlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBSZXR1cm5UeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGhhc0l0ZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJl
dHVyblR5cGUsIEZyb3plbkFycmF5VHlwZSwgaGFzRnJvemVuQXJyYXlUeXBlPjo6Y29udmVydChz
dGF0ZSwgdmFsdWUpLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAgIDMuIElmIHR5cGVzIGluY2x1ZGVzIGEgZGljdGlvbmFyeSB0eXBl
LCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICBjb252ZXJ0aW5nIFYgdG8gdGhhdCBkaWN0aW9uYXJ5IHR5cGUuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChoYXNEaWN0aW9uYXJ5VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVy
PFJldHVyblR5cGUsIERpY3Rpb25hcnlUeXBlLCBoYXNEaWN0aW9uYXJ5VHlwZT46OmNvbnZlcnQo
c3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgNC4g
SWYgdHlwZXMgaW5jbHVkZXMgYSByZWNvcmQgdHlwZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBv
ZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCByZWNvcmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGhhc1JlY29yZFR5cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
b3ZlPFdURjo6Q2hlY2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5U
eXBlLCBSZWNvcmRUeXBlLCBoYXNSZWNvcmRUeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA1LiBJZiB0eXBlcyBpbmNsdWRl
cyBhIGNhbGxiYWNrIGludGVyZmFjZSB0eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNv
bnZlcnRpbmcgViB0byB0aGF0IGludGVyZmFjZSB0eXBlLgotICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgIChGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGNhbGxiYWNrIGludGVyZmFjZSB0eXBl
IGFuZCBzdGVwIDEyLjUpCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICA2LiBJZiB0eXBlcyBp
bmNsdWRlcyBvYmplY3QsIHRoZW4gcmV0dXJuIHRoZSBJREwgdmFsdWUgdGhhdCBpcyBhIHJlZmVy
ZW5jZSB0byB0aGUgb2JqZWN0IFYuCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb2JqZWN0IGFuZCBzdGVwIDEyLjYpCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMTIuIElmIFYgaXMg
YSBCb29sZWFuIHZhbHVlLCB0aGVuOgotICAgICAgICAvLyAgICAgMS4gSWYgdHlwZXMgaW5jbHVk
ZXMgYSBib29sZWFuLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byBi
b29sZWFuLgotICAgICAgICBjb25zdGV4cHIgYm9vbCBoYXNCb29sZWFuVHlwZSA9IGJyaWdhbmQ6
OmFueTxUeXBlTGlzdCwgc3RkOjppc19zYW1lPElETEJvb2xlYW4sIGJyaWdhbmQ6Ol8xPj46OnZh
bHVlOwotICAgICAgICBpZiAoaGFzQm9vbGVhblR5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlPFdURjo6Q2hl
Y2tNb3ZlUGFyYW1ldGVyPihDb25kaXRpb25hbENvbnZlcnRlcjxSZXR1cm5UeXBlLCBJRExCb29s
ZWFuLCBoYXNCb29sZWFuVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gMTMuIElmIFYgaXMgYSBOdW1iZXIgdmFsdWUs
IHRoZW46Ci0gICAgICAgIC8vICAgICAxLiBJZiB0eXBlcyBpbmNsdWRlcyBhIG51bWVyaWMgdHlw
ZSwgdGhlbiByZXR1cm4gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIFYgdG8gdGhhdCBudW1lcmlj
IHR5cGUuCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGhhc051bWVyaWNUeXBlID0gYnJpZ2FuZDo6
c2l6ZTxOdW1lcmljVHlwZUxpc3Q+Ojp2YWx1ZSAhPSAwOwotICAgICAgICBpZiAoaGFzTnVtZXJp
Y1R5cGUpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFs
Q29udmVydGVyPFJldHVyblR5cGUsIE51bWVyaWNUeXBlLCBoYXNOdW1lcmljVHlwZT46OmNvbnZl
cnQoc3RhdGUsIHZhbHVlKS52YWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
Ly8gMTQuIElmIHR5cGVzIGluY2x1ZGVzIGEgc3RyaW5nIHR5cGUsIHRoZW4gcmV0dXJuIHRoZSBy
ZXN1bHQgb2YgY29udmVydGluZyBWIHRvIHRoYXQgdHlwZS4KLSAgICAgICAgY29uc3RleHByIGJv
b2wgaGFzU3RyaW5nVHlwZSA9IGJyaWdhbmQ6OnNpemU8U3RyaW5nVHlwZUxpc3Q+Ojp2YWx1ZSAh
PSAwOwotICAgICAgICBpZiAoaGFzU3RyaW5nVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1vdmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVy
blR5cGUsIFN0cmluZ1R5cGUsIGhhc1N0cmluZ1R5cGU+Ojpjb252ZXJ0KHN0YXRlLCB2YWx1ZSku
dmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gMTUuIElmIHR5cGVzIGluY2x1ZGVzIGEgbnVtZXJpYyB0
eXBlLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgViB0byB0aGF0IG51bWVy
aWMgdHlwZS4KLSAgICAgICAgaWYgKGhhc051bWVyaWNUeXBlKQotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bW92ZTxXVEY6OkNoZWNrTW92ZVBhcmFtZXRlcj4oQ29uZGl0aW9uYWxDb252ZXJ0ZXI8
UmV0dXJuVHlwZSwgTnVtZXJpY1R5cGUsIGhhc051bWVyaWNUeXBlPjo6Y29udmVydChzdGF0ZSwg
dmFsdWUpLnZhbHVlKCkpOwotCi0gICAgICAgIC8vIDE2LiBJZiB0eXBlcyBpbmNsdWRlcyBhIGJv
b2xlYW4sIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBWIHRvIGJvb2xlYW4u
Ci0gICAgICAgIGlmIChoYXNCb29sZWFuVHlwZSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1v
dmU8V1RGOjpDaGVja01vdmVQYXJhbWV0ZXI+KENvbmRpdGlvbmFsQ29udmVydGVyPFJldHVyblR5
cGUsIElETEJvb2xlYW4sIGhhc0Jvb2xlYW5UeXBlPjo6Y29udmVydChzdGF0ZSwgdmFsdWUpLnZh
bHVlKCkpOwotCi0gICAgICAgIC8vIDE3LiBUaHJvdyBhIFR5cGVFcnJvci4KLSAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBSZXR1cm5UeXBlKCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydGVy
PElETFVuaW9uPFQuLi4+PiB7Ci0gICAgdXNpbmcgVHlwZSA9IElETFVuaW9uPFQuLi4+OwotICAg
IHVzaW5nIFR5cGVMaXN0ID0gdHlwZW5hbWUgVHlwZTo6VHlwZUxpc3Q7Ci0gICAgdXNpbmcgSW1w
bGVtZW50YXRpb25UeXBlID0gdHlwZW5hbWUgVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7Ci0KLSAgICB1c2luZyBTZXF1
ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6
OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47Ci0KLSAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZhcmlhbnQpCi0g
ICAgewotICAgICAgICBhdXRvIGluZGV4ID0gdmFyaWFudC5pbmRleCgpOwotCi0gICAgICAgIHN0
ZDo6b3B0aW9uYWw8SlNDOjpKU1ZhbHVlPiByZXR1cm5WYWx1ZTsKLSAgICAgICAgYnJpZ2FuZDo6
Zm9yX2VhY2g8U2VxdWVuY2U+KFsmXShhdXRvJiYgdHlwZSkgewotICAgICAgICAgICAgdXNpbmcg
SSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0
eXBlOjp0eXBlOwotICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwg
V1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZh
bHVlLnZhbHVlKCk7Ci0gICAgfQotfTsKLQotLy8gTUFSSzogLQotLy8gTUFSSzogRGF0ZSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IENvbnZlcnRlcjxJRExEYXRlPiA6IERlZmF1bHRDb252ZXJ0
ZXI8SURMRGF0ZT4gewotICAgIHN0YXRpYyBkb3VibGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRv
RGF0ZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0Nv
bnZlcnRlcjxJRExEYXRlPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUg
PSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IGZh
bHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgZG91YmxlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzRGF0ZSgmc3RhdGUs
IHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBJRExKU09OIHR5cGUK
LQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ29udmVydGVyPElETEpTT04+IDogRGVmYXVsdENvbnZlcnRl
cjxJRExKU09OPiB7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpTQzo6SlNP
TlN0cmluZ2lmeSgmc3RhdGUsIHZhbHVlLCAwKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0
cnVjdCBKU0NvbnZlcnRlcjxJRExKU09OPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5l
ZWRzU3RhdGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9i
amVjdCA9IGZhbHNlOwotCi0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBKU0M6OkpTT05QYXJzZSgmc3RhdGUsIHZhbHVlKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgdHlwZQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gOiBEZWZh
dWx0Q29udmVydGVyPElETFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTxUPj4gewotICAgIHN0YXRpYyBS
ZWZQdHI8VD4gY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUOjpjcmVhdGUoc3RhdGUsIHZhbHVlKTsKLSAgICB9
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSlNDb252ZXJ0ZXI8SURMU2VyaWFs
aXplZFNjcmlwdFZhbHVlPFQ+PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3Rh
dGUgPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9
IHRydWU7Ci0KLSAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4gdmFsdWUp
Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS0+ZGVzZXJpYWxpemUoc3RhdGUs
ICZnbG9iYWxPYmplY3QpIDogSlNDOjpqc051bGwoKTsKLSAgICB9Ci19OwotCi0vLyBNQVJLOiAt
Ci0vLyBNQVJLOiBFdmVudCBMaXN0ZW5lciB0eXBlCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDb252ZXJ0ZXI8SURMRXZlbnRMaXN0ZW5lcjxUPj4gOiBEZWZhdWx0Q29udmVydGVyPElE
TEV2ZW50TGlzdGVuZXI8VD4+IHsKLSAgICB1c2luZyBSZXR1cm5UeXBlID0gUmVmUHRyPFQ+Owot
Ci0gICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCkKLSAgICB7Ci0gICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLnZtKCkpOwotCi0gICAg
ICAgIGF1dG8gbGlzdGVuZXIgPSBUOjpjcmVhdGUodmFsdWUsIHRoaXNPYmplY3QsIGZhbHNlLCBj
dXJyZW50V29ybGQoJnN0YXRlKSk7Ci0gICAgICAgIGlmICghbGlzdGVuZXIpCi0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAKLSAgICAgICAgcmV0dXJuIGxp
c3RlbmVyOwotICAgIH0KLX07Ci0KLS8vIE1BUks6IC0KLS8vIE1BUks6IFhQYXRoTlNSZXNvbHZl
ciB0eXBlCi0KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMWFBhdGhO
U1Jlc29sdmVyPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMWFBhdGhOU1Jlc29sdmVyPFQ+PiB7
CiAgICAgdXNpbmcgUmV0dXJuVHlwZSA9IFJlZlB0cjxUPjsKICAgICB1c2luZyBXcmFwcGVyVHlw
ZSA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxUPjo6V3JhcHBlckNsYXNz
OwpAQCAtMTc5OSwxMDIgKzYzLDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEpTQ29u
dmVydGVyPAogICAgIH0KIH07CiAKLS8vIE1BUks6IC0KLS8vIE1BUks6IElETElEQktleSB0eXBl
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpTQ29udmVydGVyPElETElEQktleT4gewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFU+Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgVSYmIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpmb3J3YXJkPFU+KHZh
bHVlKSk7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotLy8gTUFSSzogLQotLy8g
TUFSSzogSURMV2ViR0xBbnkgdHlwZQotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKU0NvbnZlcnRlcjxJ
RExXZWJHTEFueT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1
ZTsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwot
Ci0gICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xBbnkmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb0pTVmFsdWUoc3RhdGUsIGdsb2JhbE9iamVj
dCwgdmFsdWUpOwotICAgIH0KLX07Ci0KLSNlbmRpZgotCi0vLyBNQVJLOiAtCi0vLyBNQVJLOiBT
dXBwb3J0IGZvciB2YXJpYWRpYyB0YWlsIGNvbnZlcnRpb25zCi0KLW5hbWVzcGFjZSBEZXRhaWwg
ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29u
dmVydGVyQmFzZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIElETFR5cGU+IAotICAgIHN0cnVj
dCBWYXJpYWRpY0NvbnZlcnRlckJhc2UgewotICAgICAgICB1c2luZyBJdGVtID0gdHlwZW5hbWUg
SURMVHlwZTo6SW1wbGVtZW50YXRpb25UeXBlOwotCi0gICAgICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPEl0ZW0+IGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBDb252ZXJ0ZXI8SURMVHlwZT46OmNvbnZlcnQoc3RhdGUsIHZhbHVl
KTsKLSAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHN0ZDo6bnVsbG9wdCk7
Ci0KLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdHJ1Y3QgVmFyaWFkaWNDb252ZXJ0
ZXJCYXNlPElETEludGVyZmFjZTxUPj4gewotICAgICAgICB1c2luZyBJdGVtID0gc3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxUPjsKLQotICAgICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxJdGVtPiBj
b252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBhdXRvKiByZXN1bHQgPSBDb252ZXJ0ZXI8SURMSW50ZXJmYWNlPFQ+
Pjo6Y29udmVydChzdGF0ZSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om9wdGlvbmFsPEl0ZW0+KCpyZXN1bHQpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIElETFR5cGU+Ci0gICAgc3RydWN0IFZhcmlhZGljQ29udmVydGVyIDogVmFy
aWFkaWNDb252ZXJ0ZXJCYXNlPElETFR5cGU+IHsKLSAgICAgICAgdXNpbmcgSXRlbSA9IHR5cGVu
YW1lIFZhcmlhZGljQ29udmVydGVyQmFzZTxJRExUeXBlPjo6SXRlbTsKLSAgICAgICAgdXNpbmcg
Q29udGFpbmVyID0gVmVjdG9yPEl0ZW0+OwotCi0gICAgICAgIHN0cnVjdCBSZXN1bHQgewotICAg
ICAgICAgICAgc2l6ZV90IGFyZ3VtZW50SW5kZXg7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PENvbnRhaW5lcj4gYXJndW1lbnRzOwotICAgICAgICB9OwotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIElETFR5cGU+IHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWNDb252ZXJ0ZXI8SURM
VHlwZT46OlJlc3VsdCBjb252ZXJ0VmFyaWFkaWNBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBzaXplX3Qgc3RhcnRJbmRleCkKLXsKLSAgICBzaXplX3QgbGVuZ3RoID0gc3RhdGUuYXJn
dW1lbnRDb3VudCgpOwotICAgIGlmIChzdGFydEluZGV4ID4gbGVuZ3RoKQotICAgICAgICByZXR1
cm4geyAwLCBzdGQ6Om51bGxvcHQgfTsKLQotICAgIHR5cGVuYW1lIERldGFpbDo6VmFyaWFkaWND
b252ZXJ0ZXI8SURMVHlwZT46OkNvbnRhaW5lciByZXN1bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobGVuZ3RoIC0gc3RhcnRJbmRleCk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gc3RhcnRJbmRleDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBE
ZXRhaWw6OlZhcmlhZGljQ29udmVydGVyPElETFR5cGU+Ojpjb252ZXJ0KHN0YXRlLCBzdGF0ZS51
bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBy
ZXR1cm4geyBpLCBzdGQ6Om51bGxvcHQgfTsKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKCp2YWx1ZSkpOwotICAgIH0KLQotICAgIHJldHVybiB7IGxlbmd0aCwgV1RGTW92
ZShyZXN1bHQpIH07Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmVJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAkocmV2aXNpb24g
MjExNjU5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZURhdGFDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKIAotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydEJ1ZmZlclNvdXJj
ZS5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1E
ZWZhdWx0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMTE2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShSRUFEQUJMRV9TVFJFQU1fQVBJKQog
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0QnVmZmVy
U291cmNlLmgiCiAjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMTE2
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAKLSNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2Uu
aCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJy
YXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiAyMTE2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtNDY4MSw3ICs0NjgxLDcgQEAgc3Vi
IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgIG15ICR2YWx1ZSA9ICRuYW1lOwogCiAg
ICAgICAgIGlmICgkYXJndW1lbnQtPmlzVmFyaWFkaWMpIHsKLSAgICAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJKU0RPTUNvbnZlcnQuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0VmFyaWFkaWMuaCIsICRjb25kaXRpb25hbCk7
CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlc0ZvcklETFR5cGUoJHR5cGUsICRjb25kaXRp
b25hbCk7CiAgICAgICAgIAogICAgICAgICAgICAgbXkgJElETFR5cGUgPSBHZXRJRExUeXBlKCRp
bnRlcmZhY2UsICR0eXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
QW55LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFu
eS5jcHAJKHJldmlzaW9uIDIxMTY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQW55LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KFdFQkdMKQogCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252
ZXJ0LmgiCiAjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xGcmFt
ZWJ1ZmZlci5oIgogI2luY2x1ZGUgIkpTV2ViR0xQcm9ncmFtLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1NlcmlhbGl6ZWRQbGF0
Zm9ybVJlcHJlc2VudGF0aW9uTWFjLm1tCShyZXZpc2lvbiAyMTE2NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvU2VyaWFsaXplZFBsYXRmb3JtUmVwcmVzZW50YXRpb25NYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
ICYmIEVOQUJMRShEQVRBQ1VFX1ZBTFVFKQogI2luY2x1ZGUgIlNlcmlhbGl6ZWRQbGF0Zm9ybVJl
cHJlc2VudGF0aW9uTWFjLmgiCiAKLSNpbXBvcnQgIkpTRE9NQmluZGluZy5oIgorI2ltcG9ydCAi
SlNET01Db252ZXJ0QnVmZmVyU291cmNlLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2lt
cG9ydCA8QVZGb3VuZGF0aW9uL0FWTWV0YWRhdGFJdGVtLmg+CiAjaW1wb3J0IDxGb3VuZGF0aW9u
L05TU3RyaW5nLmg+CkBAIC0xNDYsMTAgKzE0NiwxMCBAQCBzdGF0aWMgSlNWYWx1ZSAqanNWYWx1
ZVdpdGhEYXRhSW5Db250ZXh0CiB7CiAgICAgYXV0byBkYXRhQXJyYXkgPSBBcnJheUJ1ZmZlcjo6
dHJ5Q3JlYXRlKFtkYXRhIGJ5dGVzXSwgW2RhdGEgbGVuZ3RoXSk7CiAKLSAgICBKU0M6OkV4ZWNT
dGF0ZSogZXhlYyA9IHRvSlMoW2NvbnRleHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7Ci0gICAgSlND
OjpKU1ZhbHVlIGFycmF5ID0gdG9KUyhleGVjLCBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGRhdGFBcnJheS5nZXQoKSk7CisgICAg
YXV0byogc3RhdGUgPSB0b0pTKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworICAgIEpT
Qzo6SlNWYWx1ZSBhcnJheSA9IHRvSlMoc3RhdGUsIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIGRhdGFBcnJheS5nZXQoKSk7CiAK
LSAgICByZXR1cm4gW0pTVmFsdWUgdmFsdWVXaXRoSlNWYWx1ZVJlZjp0b1JlZihleGVjLCBhcnJh
eSkgaW5Db250ZXh0OmNvbnRleHRdOworICAgIHJldHVybiBbSlNWYWx1ZSB2YWx1ZVdpdGhKU1Zh
bHVlUmVmOnRvUmVmKHN0YXRlLCBhcnJheSkgaW5Db250ZXh0OmNvbnRleHRdOwogfQogCiBzdGF0
aWMgSlNWYWx1ZSAqanNWYWx1ZVdpdGhBcnJheUluQ29udGV4dChOU0FycmF5ICphcnJheSwgSlND
b250ZXh0ICpjb250ZXh0KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>